Chapitre 5 : Les mécanismes de synchronisation


Problème de producteur-Consommateur


 Problème de producteur-Consommateur
 type Producteur_Conommateur = Moniteur
 Var
 Objet		Tampon[N] ;
 Int		Entrée, Sortie; /*Prennent leurs valeurs dans l'intervalle [0..N-1]*/
 Int		Compte ; 	/*Prend ses valeurs dans l'intervalle [0..N-1]*/
 Condition	De_La_Place, Des_Objets;
 
 void Ajouter(Objet	Objet_produit)
 
 {
 Si (Compte == N) De_La_Place.Wait ;
 Tampon[Entrée] = Objet_produit ;
 Compte = Compte + 1 ;
 Entrée = (Entrée + 1) % N ;
 Des_Objets.Signal ;
 Occupé = Vrai ;
 }
 
 void Prendre(Objet	*Objet_Consommé)
 
 {
 Si (Compte == 0) Des_Objets.Wait ;
 *Objet_consommé = Tampon[Sortie] ;
 Compte = Compte - 1 ;
 Sortie = (Sortie + 1) % N ;
 De_La_Place.Signal ;
 }
 
 {
 Entrée 	= 0 ;
 Sortie 	= 0 ;
 Compte	= 0 ;
 }
 
 
 Producteur
 {
  .....
  Objet	Objet_Prod ;
  .....
  .....
 While(1)
 	{
 	 Produire(Objet_Prod);
 	 Ajouter(Objet_Pro) ;
 	}
 }
 
 
 Consommateur
 {
  .....
 Objet	Objet_Cons ;
  .....
  .....
 While(1)
 	{
 	 Prendre(&Objet_Cons);
 	 Consommer(Objet_Cons) ;
 	}
 }