From 19a4de8ca85b8264586e327d74f81288079c1e82 Mon Sep 17 00:00:00 2001 From: ngenyingondo <raphael.ngenyi@student.uclouvain.be> Date: Tue, 5 May 2020 21:08:51 +0200 Subject: [PATCH] modif put_in_buffer_1 --- run.c | 85 +++++++++++++++++++++++++++++---------------------------- run.o | Bin 0 -> 22696 bytes test.o | Bin 0 -> 21152 bytes 3 files changed, 43 insertions(+), 42 deletions(-) create mode 100644 run.o create mode 100644 test.o diff --git a/run.c b/run.c index 46a3bf7..05c7155 100755 --- a/run.c +++ b/run.c @@ -1,15 +1,16 @@ #include "run.h" void put_in_buffer_1(char *c, struct buffer_rc *ptr){ //ajouter un element dans le buffer 1 - - ptr->tab[ptr->head] = malloc(sizeof(char*)); // on stoxke de espace + + ptr->tab[ptr->head] = malloc(sizeof(char*)); // on stoxke de espace + if(ptr->tab[ptr->head] ==NULL){return;} //ptr->tab[ptr->head] = c; strcpy(ptr->tab[ptr->head],c); //copie - - ptr->len++; - ptr->head = (ptr->head + 1)%ptr->size; //chaque fois qu'un élément est ajouté, + + ptr->len++; + ptr->head = (ptr->head + 1)%ptr->size; //chaque fois qu'un élément est ajouté, //on augmente le pointeur de 1 mais l'espace du buffer est de size donc faire un modulo - + } char *get_from_buffer_1(struct buffer_rc *ptr){ // chercher dans le buffer 1 @@ -30,7 +31,7 @@ void put_in_buffer_2(struct queue *ptr, struct buffer_cw *buf){ //ajouter un ele } queue_t *get_from_buffer_2(struct buffer_cw *buf){ // trouver un element - + struct queue *result; result = buf->tab[buf->tail]; //donne une valeur a result //free(buf->tab[buf->tail]); @@ -61,7 +62,7 @@ int is_prime(unsigned long long number) { // Vérifie si number est un nombre pr return 1 ; //sinon => VRAI } -void enqueue(queue_t* q, unsigned long long val){ +void enqueue(queue_t* q, unsigned long long val){ struct node *ptr; ptr = malloc(sizeof(node_t)); @@ -109,18 +110,18 @@ void *writing(void *param){ struct buffer_cw *param1 = (struct buffer_cw *) param; int stop = 0; - - while(param1->stop == 0){ - + + while(param1->stop == 0){ + sem_wait(&full2); pthread_mutex_lock(&mutex2); queue_t *pr_divs = get_from_buffer_2(param); pthread_mutex_unlock(&mutex2); - sem_post(&empty2); + sem_post(&empty2); if (pr_divs->final == 1) - { - + { + if (stop == N-1){ free(pr_divs); free(param1->tab); @@ -130,7 +131,7 @@ void *writing(void *param){ stop++; } else{ - FILE *file2 = param1->file2; + FILE *file2 = param1->file2; node_t *current; current = pr_divs->tail; @@ -139,7 +140,7 @@ void *writing(void *param){ fprintf(file2,"%llu",current->value); node_t *toFree = current; current = current->next; - + for (int i = 1; i < pr_divs->size; i++) { @@ -149,14 +150,14 @@ void *writing(void *param){ current = current->next; } fputc('\n',file2); - + free(pr_divs->tail); free(pr_divs); } - + } - + return NULL; } @@ -166,8 +167,8 @@ void *calculating(void *param){ struct buffer_rc *buffer_1 = param1->struct1; struct buffer_cw *buffer_2 = param1->struct2; - - while(buffer_1->stop == 0){ + + while(buffer_1->stop == 0){ sem_wait(&full1); pthread_mutex_lock(&mutex1); @@ -176,7 +177,7 @@ void *calculating(void *param){ sem_post(&empty1); if (strcmp("stop",chaine) == 0) - { + { struct queue *final; final = malloc(sizeof(queue_t)); if (final == NULL){return NULL;} @@ -185,45 +186,45 @@ void *calculating(void *param){ sem_wait(&empty2); pthread_mutex_lock(&mutex2); - put_in_buffer_2(final,buffer_2); + put_in_buffer_2(final,buffer_2); pthread_mutex_unlock(&mutex2); sem_post(&full2); - + free(chaine); return NULL; } - + struct queue *pr_divs; pr_divs = prime_divs(strtoll(chaine,NULL,0)); - + sem_wait(&empty2); pthread_mutex_lock(&mutex2); - put_in_buffer_2(pr_divs,buffer_2); + put_in_buffer_2(pr_divs,buffer_2); pthread_mutex_unlock(&mutex2); sem_post(&full2); free(chaine); } - + return NULL; } void *reading (void *param){ struct buffer_rc *param1= (struct buffer_rc *) param; - + char chaine[30]; FILE *input; input = param1->file1; - + while (fgets(chaine,30,input) != NULL){ - + sem_wait(&empty1); pthread_mutex_lock(&mutex1); - + put_in_buffer_1(chaine,param1); //put each line in the buffer #1 - + pthread_mutex_unlock(&mutex1); sem_post(&full1); } @@ -234,11 +235,11 @@ void *reading (void *param){ pthread_mutex_lock(&mutex1); put_in_buffer_1("stop\0",param1); //put each stop line in the buffer #1 - + pthread_mutex_unlock(&mutex1); sem_post(&full1); } - + return NULL; } @@ -265,14 +266,14 @@ struct buffer_rc * buff_init_1(FILE *file1){ if (ptr1 == NULL){ free(ptr1); return NULL;} - ptr1->tab = malloc(2*N*sizeof(char*)); + ptr1->tab = malloc(2*N*sizeof(char*)); ptr1->size = 2*N; ptr1->len = 0; ptr1->head = 0; ptr1->tail = 0; ptr1->stop = 0; ptr1->file1 = file1; - + return ptr1; } @@ -282,7 +283,7 @@ struct buffer_cw * buff_init_2(FILE *file2){ ptr2 = malloc(sizeof(struct buffer_cw)); if (ptr2 == NULL){ return NULL;} - + ptr2->tab = malloc(2*N*sizeof(struct queue*)); ptr2->size = 2*N; @@ -291,7 +292,7 @@ struct buffer_cw * buff_init_2(FILE *file2){ ptr2->tail = 0; ptr2->stop = 0; ptr2->file2 = file2; - + return ptr2; } @@ -302,7 +303,7 @@ struct buffer_rccw *buff_init_12(struct buffer_rc *ptr1,struct buffer_cw *ptr2){ if (ptr3 == NULL){return NULL;} ptr3->struct1 = ptr1; ptr3->struct2 = ptr2; - + return ptr3; } @@ -337,7 +338,7 @@ void mut_sem_destroy(void){ int run (char *input,char *output, int n_threads){ N = n_threads; - + FILE *file1; FILE *file2; @@ -355,7 +356,7 @@ int run (char *input,char *output, int n_threads){ struct buffer_rc *ptr1 = buff_init_1(file1); struct buffer_cw *ptr2 = buff_init_2(file2); struct buffer_rccw *ptr3 = buff_init_12(ptr1,ptr2); - + sem_1_initializer(ptr1); sem_2_initializer(ptr2); diff --git a/run.o b/run.o new file mode 100644 index 0000000000000000000000000000000000000000..b0081eb4a3921755482a912e35e3db220d1093b7 GIT binary patch literal 22696 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 literal 0 HcmV?d00001 diff --git a/test.o b/test.o new file mode 100644 index 0000000000000000000000000000000000000000..8292e4a379af2d6e89d47408f40a49e15fc98db3 GIT binary patch literal 21152 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 A*Z=?k literal 0 HcmV?d00001 -- GitLab