Implémentation d’un moniteurPour implémenter un moniteur, on utilise des sémaphores. C'est un changement de niveau. On fait une traduction manuelle des moniteurs aux sémaphores. Règle : une file d'attente donne 1 sémaphore et 1 entier.
exemple : on a x file : f1, f2, ... fx. on crée donc : sémaphore : Semi init 0 (i de 1 à x) entier : nb i init 0 (i de 1 à x) sémaphore mutex init 1 (exclusion mutuelle) sémaphore urgent init 0 entier nburg init 0.
entrée dans le moniteur |
P(mutex) |
sortie du moniteur |
si nburg > 0 alors V(urgent) sinon V(mutex) |
fi.WAIT |
nb ++ si nburg > 0 alors V(urgent) sinon V(mutex) P(Semi) nb-- |
fi.SIGNAL |
si nbi <> 0 alors nburg ++ ; V(Semi) ; P(urgent) ; nburg -- |
fi.vide |
nbi = 0 |
fi.queue |
| |