Synchronisation des processus
Bonjour,
J'ai crée des processus fils (conso/prod) partageant un segment de mémoire en l'occurrence un tableau d'entiers.
Le nombre de producteurs et consommateurs est passé en paramètre du programme principal (main).
Seulement, après création d'une ressource partagée, on doit le détruire par la suite i.e lorsqu'on ne l'utilise plus.
Mon problème est là.
code1 : Je mets 3 producteurs et 5 consommateurs ça ne marche pas bien évidemment.
solution :
code2 : Je les fais boucler indéfiniment cela fonctionne mais à ce moment comment détruire la ressource partagée?
Voici le code1
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
void producteur{
P(caseVide);
P(mutexP);
// dépôt de massage
V(casePleine);
V(mutexP);
}
void consommateur{
P(casePleine);
P(mutexC);
// dépôt de massage
V(caseVide);
V(mutexC);
}
/* Programme principal */
// création de la mémoire partagée
// Attachement à la ressource partagée
//création des sémaphores
// Créer les producteurs
for(i=0; i<nombre_prod; i++){
if((pid=fork()) == -1)
die("fork");
if(pid==0){
producteur();
shmdt(...);
exit(EXIT_SUCCESS);
}
}
// Créer les consommateurs
for(i=0; i<nombre_conso; i++){
if((pid=fork()) == -1)
die("fork");
if(pid==0){
consommateur();
shmdt(...);
exit(EXIT_SUCCESS);
}
}
// Attend les processus fils
// détruit le sehment de mémoire
// détruit le sémaphore |
Et le code2, la différence est dans le code producteur-consommateur (boucle infini donc je ne peux détruire la ressource):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Je mets une boucle
void producteur{
while(TRUE){
...
}
}
void consommateur{
while(TRUE){
...
}
} |
Une idée?
Merci.