From 1561674f6c71810c3938d6aa73cce8d2576a82c7 Mon Sep 17 00:00:00 2001 From: Arnaud Lefebvre <arnaud.lefebvre@student.uclouvain.be> Date: Wed, 13 May 2020 18:46:01 +0200 Subject: [PATCH] Replace main.c --- Code_With_Threads/main.c | 46 +++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/Code_With_Threads/main.c b/Code_With_Threads/main.c index 2df062e..ff03f7a 100644 --- a/Code_With_Threads/main.c +++ b/Code_With_Threads/main.c @@ -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 -- GitLab