| 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) ;
}
}