On veut implémenter une structure classique de parallèlisme appelée producteur-consommateur. Le principe est le suivant. Un ou plusieurs threads remplissent une structure de données tandis que un ou plusieurs autres suppriment des éléments dedans. Il existe de nombreuses variantes, par exemple avec consommateur ne supprimant pas la ressource, avec priorité....
Un moniteur est un objet qui permet a un ou plusieurs processus de se synchroniser. Un processus peut ainsi attendre un signal venant d'un autre processus avant de poursuivre son exécution. Un moniteur peut avoir un nombre arbitraire de méthodes et l'accès à ces méthodes se fait à travers une exclusion mutuelle.
Concrètement, un moniteur encapsule une condition (souvent appelée aussi queue) C sur laquelle il est possible de faire les opérations suivantes :
C.wait(): le processus appelant arrête son exécution et se place dans la queue C. Il est considéré comme hors de la section critique
C.signal() :
C.empty() : Prédicat pour tester si la queue est vide
Soit le moniteur suivant
moniteur RDV
entier Compteur
entier MAX = 10
condition Queue
//cette méthode aurait pu s'appeler toto ou titi
//et on pourrait en rajouter d'autres
methode barriere()
...
fin methode
fin moniteur
Il permet de créer une barrière, c'est à dire un point de synchronisation pour un ensemble de processus (ici 10). Chaque processus appelle la méthode barrière qui effectue les opérations suivantes
On suppose que la méthode barriere()
a un mécanisme d'exclusion mutuelle.
barriere()
Implémentez un producteur consommateur avec un moniteur.
Comment implémenter un moniteur en utilisant des sémaphore?