Producteur | Consommateur |
---|---|
... produire(messageP); déposer(case, messageP); ... |
... retirer(case, messageC); consommer(messageC); ... |
Problèmes : déposer un message alors que le consommateur n'a pas retiré le prédent ou retirer un message alors que le producteur n'a rien déposé.
plein indique si la case est pleine et vide ...
Producteur | Consommateur |
---|---|
P(vide) produire(messageP); déposer(case, messageP); V(plein) |
P(plein) retirer(case, messageC); consommer(messageC); V(vide) |
Amélioration :
Producteur | Consommateur |
---|---|
produire(messageP); P(vide) déposer(case, messageP); V(plein) |
P(plein) retirer(case, messageC); V(vide) consommer(messageC); |
Il faut gérer le tampon. C'est-à-dire :
Les indices tête et queue sont initialisés à 0.
plein indique le nombre de cases pleines et vide ...
Producteur | Consommateur |
---|---|
produire(messageP); P(vide); tampon[tête] = messageP; tête = (tête + 1) mod n; V(plein); |
P(plein); messageC = tampon[queue]; queue = (queue + 1) mod n; V(vide); consommer(messageC); |
On utilise 2 sémaphores mutexprod et mutexcons d'exclusion mutuelle initialisés à 1.
Producteur | Consommateur |
---|---|
produire(messageP); P(vide); P(mutexprod); tampon[tête] = messageP; tête = (tête + 1) mod n; V(mutexprod); V(plein); |
P(plein); P(mutexcons); messageC = tampon[queue]; queue = (queue + 1) mod n; V(mutexcons); V(vide); consommer(messageC); |