Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2975 connectés 

  FORUM HardWare.fr
  Programmation
  C

   probleme producteur consommateur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme producteur consommateur

n°2247129
crvmj
Posté le 31-12-2014 à 02:39:22  profilanswer
 

Exercice :
on reprend le probléme du producteur consommateur ,vu dans le cours(en généralisant le probléme a plusieurs proucteurs et consommaturs).
Tappel du probléme:
-N_C processus consommateurs accédant a un tampon partagé (tampon) lui-même remplit par N_P processus producteurs.
-les processus consommateurs lisent dans le tampon en détruisant la valeur lue (libérationd'une casedu tampon).
-les processus producturs écrivetn dan le tampon en ajoutant une valeur(remplissage d'une case du tampon).
 on urilizera trois sémaphores :
* vide, initialisé a N(le nombre de cases vides),
* plein, initialisé a 0(le nombre de cases pleines)
*mutex pour grantir l'exclusion mutuelle sur le tampon
Résoudre ce probléme en utilisant des threads et des sémaphores
 
Remarque : la taille de tampon est 6 , utiliser 10 prod et 8 conso
 
voici mon code:

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4. #include<pthread.h>
  5. #include<semaphore.h>
  6. #include <string.h>
  7. #include <stdio.h>
  8. #define N 6
  9. int i=0,j=0,m=0,T[6];
  10. sem_t vide,plein,mutex; //Déclaration de sémaphores
  11. void *prod (void *arg)
  12. {
  13. printf("les nmbres cases vides est : %d\n", N-i);
  14. sem_wait(&plein);
  15. sem_wait(&mutex);
  16. m++;                     
  17. printf("Je suis le producteur et je met le msg  dans le tampo\n" );     
  18. T[i]=m;
  19. i=(i+1)%N;
  20. sem_post(&mutex);
  21. sem_post(&vide);
  22. return NULL;
  23. }
  24. void *cons (void *arg)
  25. {
  26. sem_wait(&vide);
  27. sem_wait(&mutex);
  28. printf("Je suis le consommateur et je prend le msg dans le tampo\n" );
  29. m=T[j];
  30. j=(j+1)%N;
  31. sem_post(&mutex);
  32. sem_post(&plein);
  33. return NULL;
  34. }
  35. int main(int argc,char **argv)
  36. //int main (void)
  37. {
  38. pthread_t cons,prod;
  39. int nbrprod,nbrcons;
  40. int k;
  41. //initialisation des semaphores
  42. sem_init (&mutex, 0, 1);
  43. sem_init (&plein, 0, 0);
  44. sem_init (&vide, 0, N);
  45. printf ("Entrer le nombre de producteurs\n" );
  46. scanf ("%d", &nbrprod);
  47. printf ("Entrer le nombre de consommateurs\n" );
  48. scanf ("%d", &nbrcons);
  49. for(k=0;k<nbrprod;k++)
  50. {
  51. pthread_create(&prod,NULL,prod,NULL);
  52. }
  53. for(k=0;k<nbrcons;k++)
  54. {
  55. pthread_create(&cons,NULL,cons,NULL);
  56. }
  57. pthread_join (prod, NULL);
  58. pthread_join (cons, NULL);
  59. return 0;
  60. }

mood
Publicité
Posté le 31-12-2014 à 02:39:22  profilanswer
 

n°2247135
OrcusZ
Pro AMD | .Net lover
Posté le 31-12-2014 à 09:05:46  profilanswer
 

Bonjour,
 
Et sinon le problème que tu rencontre avec ton code?
Parce qu'on fait pas les exercices pour les autres ici.


---------------
Made you your own sentence without believing that of the others...
n°2247148
gilou
Modérateur
Modzilla
Posté le 31-12-2014 à 12:22:52  profilanswer
 

On ne fait pas les exercices pour les autres, certes, mais on les aide quand ils ont manifestement bossé lesdits exercices, ce qui a l'air d'être le cas ici.
Il veut peut être juste savoir ce qu'on pense de son code.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2247159
crvmj
Posté le 31-12-2014 à 15:58:14  profilanswer
 

le code ça marche pas .....
voici le probleme ... aidez moi svp  
[img] http://im66.gulfup.com/CeTWwT.png[/img]

n°2247162
OrcusZ
Pro AMD | .Net lover
Posté le 31-12-2014 à 16:15:49  profilanswer
 

Re,
 
Normal, le nom de tes méthodes et celle de tes threads sont les même.
 
Change le nom de tes méthodes et tu n'auras plus de problème.


---------------
Made you your own sentence without believing that of the others...
n°2247163
crvmj
Posté le 31-12-2014 à 16:20:39  profilanswer
 

comment !! je n'ai pas compris

n°2247164
OrcusZ
Pro AMD | .Net lover
Posté le 31-12-2014 à 16:37:49  profilanswer
 

J'ai commenté les lignes changées
 

Code :
  1. #include<stdio.h>
  2.     #include<stdlib.h>
  3.     #include<unistd.h>
  4.     #include<pthread.h>
  5.     #include<semaphore.h>
  6.     #include <string.h>
  7.     #include <stdio.h>
  8.     #define N 6
  9.     int i=0,j=0,m=0,T[6];
  10.     sem_t vide,plein,mutex; //Déclaration de sémaphores
  11.     void *prod_meth (void *arg) //nom de function changé
  12.     {
  13.     printf("les nmbres cases vides est : %d\n", N-i);
  14.     sem_wait(&plein);
  15.     sem_wait(&mutex);
  16.     m++;                   
  17.     printf("Je suis le producteur et je met le msg  dans le tampo\n" );   
  18.     T[i]=m;
  19.     i=(i+1)%N;
  20.     sem_post(&mutex);
  21.     sem_post(&vide);
  22.     return NULL;
  23.     }
  24.     void *cons_meth (void *arg) //nom de function changé
  25.     {
  26.     sem_wait(&vide);
  27.     sem_wait(&mutex);
  28.     printf("Je suis le consommateur et je prend le msg dans le tampo\n" );
  29.     m=T[j];
  30.     j=(j+1)%N;
  31.     sem_post(&mutex);
  32.     sem_post(&plein);
  33.     return NULL;
  34.     }
  35.     int main(int argc,char **argv)
  36.     //int main (void)
  37.     {
  38.     pthread_t cons,prod;
  39.     int nbrprod,nbrcons;
  40.     int k;
  41.     //initialisation des semaphores
  42.     sem_init (&mutex, 0, 1);
  43.     sem_init (&plein, 0, 0);
  44.     sem_init (&vide, 0, N);
  45.     printf ("Entrer le nombre de producteurs\n" );
  46.     scanf ("%d", &nbrprod);
  47.     printf ("Entrer le nombre de consommateurs\n" );
  48.     scanf ("%d", &nbrcons);
  49.     for(k=0;k<nbrprod;k++)
  50.     {
  51.     pthread_create(&prod,NULL,prod_meth,NULL); //appel changé
  52.     }
  53.     for(k=0;k<nbrcons;k++)
  54.     {
  55.     pthread_create(&cons,NULL,cons_meth,NULL); //appel_changé
  56.     }
  57.     pthread_join (prod, NULL);
  58.     pthread_join (cons, NULL);
  59.     return 0;
  60.     }


---------------
Made you your own sentence without believing that of the others...
n°2247167
crvmj
Posté le 31-12-2014 à 16:49:54  profilanswer
 

change le nom comme je veux c tt ?

n°2247169
OrcusZ
Pro AMD | .Net lover
Posté le 31-12-2014 à 17:28:40  profilanswer
 

Re,
 
Oui là c'est pour l'exemple.


---------------
Made you your own sentence without believing that of the others...
n°2247173
crvmj
Posté le 31-12-2014 à 18:08:35  profilanswer
 

ah ok mercii beaucoup cousin


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

   probleme producteur consommateur

 

Sujets relatifs
Problème d'envoi de mail avec formulaire Ajax +JsonProblème avec tuple sur Python 3.4.1
C: probleme de compil sur un typede => ferror: syntax error before ''Problème mise à jour des entity JPA /glassfish
Problème Script sql developer OracleProbleme avec FMODex en C pour lecture de .wav/.mp3
probleme sur une macroProblème sur la table de hashage
probleme d'encodage utf8 avec notepad++probleme avec la fin de la ligne
Plus de sujets relatifs à : probleme producteur consommateur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR