From ec6031962c5b6fca5e40d0a41e1f5011fbfca81e Mon Sep 17 00:00:00 2001 From: Arnaud Lefebvre <arnaud.lefebvre@student.uclouvain.be> Date: Tue, 12 May 2020 10:35:21 +0200 Subject: [PATCH] Replace main.c --- Code_With_Threads/main.c | 58 +++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/Code_With_Threads/main.c b/Code_With_Threads/main.c index f76746a..1d1380c 100644 --- a/Code_With_Threads/main.c +++ b/Code_With_Threads/main.c @@ -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); -- GitLab