Précédent Remonter Suivant

2  Exemple : le producteur consommateur

Une solution du problème du producteur consommateur au moyen de sémaphores est donnée à la figure 1. Les deux utilisations types des sémaphores sont illustrées.

#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



Précédent Remonter Suivant