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

Replace main.c

parent c844a99a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #9902 réussi
......@@ -13,11 +13,12 @@ FILE *file_in;
FILE *file_out;
char *f_in;
char *f_out;
int number_lines;
//int number_lines;
int nthreads = 1;
buffer1 *buffer_1;
buffer2 *buffer_2;
void *reading() {
file_in = fopen(f_in, "r");
if (file_in == NULL) {
......@@ -43,7 +44,10 @@ void *reading() {
pthread_mutex_unlock(&(buffer_1->mutex));
sem_post(&(buffer_1->full));
}
pthread_mutex_lock(&(buffer_1->mutex));
buffer_1->can_stop = true;
pthread_mutex_unlock(&(buffer_1->mutex));
return EXIT_SUCCESS;
}
......@@ -52,6 +56,7 @@ void *reading() {
void *calculating() {
while (buffer_1->can_stop == false || buffer_1->numbers->length != 0) {
int number = 0;
sem_wait(&(buffer_1->full));
pthread_mutex_lock(&(buffer_1->mutex));
number = get_node_t(buffer_1->numbers);
......@@ -66,15 +71,24 @@ void *calculating() {
pthread_mutex_unlock(&(buffer_2->mutex));
sem_post(&(buffer_2->full));
}
//clear_list_t(list_prime);
pthread_mutex_unlock(&(buffer_2->mutex));
buffer_2->can_stop = true;
pthread_mutex_unlock(&(buffer_2->mutex));
return EXIT_SUCCESS;
}
void *writing() {
/*
number_lines = count_lines(f_in);
while(number_lines != 0) {
number_lines--;
while (number_lines > 0) {
number_lines -= 1;
*/
while(buffer_2->can_stop == false || buffer_2->prime_numbers->length > 0) {
sem_wait(&(buffer_2->full));
pthread_mutex_lock(&(buffer_2->mutex));
......@@ -82,15 +96,17 @@ void *writing() {
pthread_mutex_unlock(&(buffer_2->mutex));
sem_post(&(buffer_2->free));
//printf("removed->first = %d\n", get_at_index(removed, 0));
int length = removed->length;
for (int i = 0; i < length; i++) {
fprintf(file_out, "%d ", get_at_index(removed, i));
fprintf(file_out, "%d ", get_node_t(removed));
}
clear_list_t(removed);
free(removed);
fprintf(file_out, "\n");
}
//printf("number_lines = %d \n", number_lines);
return EXIT_SUCCESS;
}
......@@ -149,18 +165,32 @@ int main(int argc, char *argv[]) {
if (pthread_join(read, NULL) != 0) {
printf("Error with join reading thread.\n");
return -1;
} else {
printf("Read_thread_join OK.\n");
}
for (int i = 0; i < nthreads; i++) {
if (pthread_cancel(calc[i]) != 0) {
printf("Error with cancel calculating thread[%d].\n", i);
} else {
printf("Calc_thread_cancel[%d].\n", i);
}
}
for (int i = 0; i < nthreads; i++) {
if (pthread_join(calc[i], NULL) != 0) {
printf("Error with join calculating thread.\n");
return -1;
} else {
printf("Calc_thread_join[%d] OK.\n", i);
}
}
if (pthread_join(write, NULL) != 0) {
printf("Error with join writing thread.\n");
return -1;
} else {
printf("Write_thread_join OK.\n");
}
......@@ -177,4 +207,4 @@ int main(int argc, char *argv[]) {
free(buffer_2);
return 0;
}
}
\ No newline at end of file
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