diff --git a/C_Language/TP_SYS/tp_sema/consommateur.c b/C_Language/TP_SYS/tp_sema/consommateur.c index b57ad31..69e1328 100644 --- a/C_Language/TP_SYS/tp_sema/consommateur.c +++ b/C_Language/TP_SYS/tp_sema/consommateur.c @@ -72,7 +72,6 @@ int main( int argc, char **argv) *memoireP = temp; V(mutex_data); - sleep(5); // nbDeProd => est-ce qu'il y a des producteur (si 0 on quitte) int nbDeProd; @@ -80,6 +79,11 @@ int main( int argc, char **argv) int numTete = 0; int vartemp; + // Variable temporaire qui indique le premier lancement du consommateur.c + // Si = 0 alors aucun producteur ne s'est connecté, on ne quitte pas le programme + // Si != 0 et si nbDeProd = 0 alors on quitte + int premier_lancement = 0; + // Création des fenêtres MARCHE f_haut = creation_fenetre(LINES/NB_FENETRES,0,"F_HAUT") ; f_milieu1 = creation_fenetre(LINES/NB_FENETRES,LINES - 3 * (LINES/NB_FENETRES),"F_MILIEU1") ; @@ -91,10 +95,17 @@ int main( int argc, char **argv) // On (re)met nbDeProd à 0 nbDeProd = 0; - // On vérifie qu'il y ait toujours des producteurs MARCHE + // On vérifie qu'il y ait toujours des producteurs + P(mutex_tpa); for(i = 0 ; i < MAX_PROD && nbDeProd == 0 ; i++ ) + { if(memoireP->tpa[i] != -1) + { nbDeProd++; + premier_lancement++; + } + } + V(mutex_tpa); P(mutex_data); vartemp = (int) memoireP->tete; @@ -105,7 +116,6 @@ int main( int argc, char **argv) { numTete = vartemp; c = msgtemp.c; - //w = tprod[msgtemp.idp].w; w = f_haut; waddch(w,c) ; @@ -119,7 +129,7 @@ int main( int argc, char **argv) V(mutex_data); // S'il n'y a plus de producteurs, on quitte - if(nbDeProd == 0) + if(nbDeProd == 0 && premier_lancement != 0) { if(shmctl(shmid, IPC_RMID, 0) < 0) { perror("shmctl"); exit(EXIT_FAILURE); } @@ -130,7 +140,7 @@ int main( int argc, char **argv) endwin() ; exit(EXIT_SUCCESS); } - usleep(10); // Ralentissement volontaire du programme + usleep(5); // Ralentissement volontaire du programme } exit(EXIT_FAILURE); }