#define N 100 /* nombre de places dans le tampon */
semaphore_t mutex = sema_init (1) ; /* contrôle d'accès au tampon */
semaphore_t vide = sema_init (N) ; /* nb de places libres */
semaphore_t plein = sema_init (0) ; /* nb de places occupées */
void producteur (void)
{
objet_t objet ;
while (TRUE) {
produire_objet (&objet) ; /* produire l'objet suivant */
down (&vide) ; /* déc. nb places libres */
down (&mutex) ; /* entrée en section critique */
mettre_objet (objet) ; /* mettre l'objet dans le tampon */
up (&mutex) ; /* sortie de section critique */
up (&plein) ; /* inc. nb place occupées */
}
}
void consommateur (void)
{
objet_t objet ;
while (TRUE) {
down (&plein) ; /* déc. nb emplacements occupés */
down (&mutex) ; /* entrée section critique */
retirer_objet (&objet) ; /* retire un objet du tampon */
up (&mutex) ; /* sortie de la section critique */
up (&vide) ; /* inc. nb emplacements libres */
utiliser_objet (objet) ; /* utiliser l'objet */
}
}
Figure 1 : Une solution du problème du producteur consommateur
au moyen de sémaphores