diff --git a/Code_With_Threads/main.c b/Code_With_Threads/main.c index ff03f7a59fe8e3f3a40298a44f14d9814f55de43..b0595b712f94845953fa68f6ce74ee900f48d80d 100644 --- a/Code_With_Threads/main.c +++ b/Code_With_Threads/main.c @@ -13,7 +13,6 @@ FILE *file_in; FILE *file_out; char *f_in; char *f_out; -//int number_lines; int nthreads = 1; buffer1 *buffer_1; buffer2 *buffer_2; @@ -49,7 +48,7 @@ void *reading() { buffer_1->can_stop = true; pthread_mutex_unlock(&(buffer_1->mutex)); - return EXIT_SUCCESS; + return NULL; } @@ -76,20 +75,12 @@ void *calculating() { buffer_2->can_stop = true; pthread_mutex_unlock(&(buffer_2->mutex)); - return EXIT_SUCCESS; + return NULL; } void *writing() { - /* - number_lines = count_lines(f_in); - 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)); list_t *removed = get_node_lst(buffer_2->prime_numbers); @@ -105,9 +96,7 @@ void *writing() { fprintf(file_out, "\n"); } - //printf("number_lines = %d \n", number_lines); - - return EXIT_SUCCESS; + return NULL; } int main(int argc, char *argv[]) { @@ -169,6 +158,7 @@ int main(int argc, char *argv[]) { 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); @@ -185,6 +175,22 @@ int main(int argc, char *argv[]) { printf("Calc_thread_join[%d] OK.\n", i); } } + */ + + for (int i = 0; i < nthreads; i++) { + if (pthread_cancel(calc[i]) != 0) { + printf("Error with cancel calculating thread[%d].\n", 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); + } + } else { + printf("Calc_thread_cancel[%d].\n", i); + } + + } if (pthread_join(write, NULL) != 0) { printf("Error with join writing thread.\n"); @@ -193,14 +199,12 @@ int main(int argc, char *argv[]) { printf("Write_thread_join OK.\n"); } - fclose(file_in); fclose(file_out); printf("Files close.\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);