Skip to content
Extraits de code Groupes Projets
Valider ec603196 rédigé par Arnaud Lefebvre's avatar Arnaud Lefebvre
Parcourir les fichiers

Replace main.c

parent c66a4187
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #9231 réussi
......@@ -28,31 +28,39 @@ void *reading() {
}
int number = 0;
while (fscanf(file_in, "%ls", &number) != EOF) {
while (fscanf(file_in, "%d", &number) != EOF) {
sem_wait(&(buffer_1->free));
pthread_mutex_lock(&(buffer_1->mutex));
put_node_t(buffer_1->numbers, number);
number_lines++;
pthread_mutex_unlock(&(buffer_1->mutex));
sem_post(&(buffer_1->full));
}
return EXIT_SUCCESS;
}
void *calculating() {
sem_wait(&(buffer_1->free));
sem_wait(&(buffer_1->full));
pthread_mutex_lock(&(buffer_1->mutex));
int number = get_node_t(buffer_1->numbers);
//printf("nomber = %d\n", number);
pthread_mutex_unlock(&(buffer_1->mutex));
sem_post(&(buffer_1->full));
sem_post(&(buffer_1->free));
list_t *list_prime = prime_list(number);
//printf("%d, number\n", get_node_t(list_prime));
//printf("%d, divider\n", get_node_t(list_prime));
//printf("%d, divider2\n", get_node_t(list_prime));
sem_wait(&(buffer_2->free));
pthread_mutex_lock(&(buffer_2->mutex));
put_node_lst(buffer_2->prime_numbers, list_prime);
pthread_mutex_unlock(&(buffer_2->mutex));
sem_post(&(buffer_2->full));
//clear_list_t(list_prime);
return EXIT_SUCCESS;
}
void *writing() {
......@@ -64,21 +72,26 @@ void *writing() {
printf("file_out opened with succes.\n");
}
number_lines = count_lines(f_in);
while(number_lines != 0) {
number_lines--;
sem_wait(&(buffer_2->free));
sem_wait(&(buffer_2->full));
pthread_mutex_lock(&(buffer_2->mutex));
list_t *removed = get_node_lst(buffer_2->prime_numbers);
pthread_mutex_unlock(&(buffer_2->mutex));
sem_post(&(buffer_2->full));
sem_post(&(buffer_2->free));
for (int i = 0; i < removed->length; i++) {
fprintf(file_out, "%d ", get_at_index(removed, i));
//fprintf(file_out, "%d : ", removed->length);
int length = removed->length;
for (int i = 0; i < length; i++) {
fprintf(file_out, "%d ", get_node_t(removed));
}
fprintf(file_out, "\n");
clear_list_t(removed);
free(removed);
fprintf(file_out, "\n");
}
return EXIT_SUCCESS;
}
int main(int argc, char *argv[]) {
......@@ -97,20 +110,23 @@ int main(int argc, char *argv[]) {
f_out = argv[optind + 1];
}
buffer_1 = init_buffer_1(nthreads);
if (!buffer_1) {
// free(buffer_1);
printf("Error with buffer_1.\n");
return -1;
}
buffer_2 = init_buffer_2(nthreads);
if (!buffer_2) {
// free(buffer_2);
printf("Error with buffer_2.\n");
return -1;
}
pthread_t read;
pthread_t calc[nthreads+2];
pthread_t calc[nthreads];
pthread_t write;
if (pthread_create(&read, NULL, &reading, NULL) != 0) {
......@@ -119,7 +135,7 @@ int main(int argc, char *argv[]) {
}
for (int i = 0; i < nthreads; i++) {
if (pthread_create(&calc[i], NULL, calculating, NULL) != 0) {
if (pthread_create(&calc[i], NULL, &calculating, NULL) != 0) {
printf("Error with creating calculating thread.\n");
return -1;
}
......@@ -135,9 +151,9 @@ int main(int argc, char *argv[]) {
return -1;
}
pthread_mutex_lock(&(buffer_1->mutex));
buffer_1->is_running = false;
pthread_mutex_unlock(&(buffer_1->mutex));
// pthread_mutex_lock(&(buffer_1->mutex));
// buffer_1->is_running = false;
// pthread_mutex_unlock(&(buffer_1->mutex));
for (int i = 0; i < nthreads; i++) {
if (pthread_join(calc[i], NULL) != 0) {
......@@ -151,15 +167,15 @@ int main(int argc, char *argv[]) {
return -1;
}
if (fclose(file_in) == -1) {
printf("Error with close file_in.\n");
}
if (fclose(file_out) == -1) {
printf("Error with close file_out.\n");
}
fclose(file_in);
fclose(file_out);
printf("Files close.\n");
printf("File closed.\n");
clear_list_t(buffer_1->numbers);
free(buffer_1->numbers);
clear_list_lst(buffer_2->prime_numbers);
free(buffer_2->prime_numbers);
free(buffer_1);
free(buffer_2);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter