Skip to content
Extraits de code Groupes Projets
Valider 19a4de8c rédigé par Raphaël Ngenyi-Ngondo's avatar Raphaël Ngenyi-Ngondo
Parcourir les fichiers

modif put_in_buffer_1

parent 7c8f6624
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #7977 réussi
#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);
......
Fichier ajouté
Fichier ajouté
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