Définition : Un moniteur comprend des
variables, des conditions, des procédures et un code
d'initialisation. Seules les procédures peuvent être manipulées par
les processus, et le mécanisme du moniteur garantit l'exécution de
chaque procédure en exclusion mutuelle.
Syntaxe d'un moniteur
type nom du moniteur = monitor
déclarations de variables
déclarations de conditions
procedure entry P1(...)
begin ...end;
procedure entry Pn(...)
begin ...end;
begin
code d'initialisation
end.
La synchronisation des processus est obtenu à l'aide des procédures wait et signal appliquées sur les variables de type condition. L'action X.signal provoque le réveil de tous les processus qui ont auparavant effectué X.wait.
Une solution au problème de la section critique
type SectionCritique = monitor
token : booleen;
sc : condition
procedure entry EntreeSC
begin
while not token do sc.wait;
token := false;
end;
procedure entry SortieSC
begin
token := true;
sc.signal;
end;
begin
token := true
end.
shared var SC = SectionCritique
Code des processus
begin
while true do begin
code de la section non critique
SC.EntreeSC;
code de la section critique
SC.SortieSC
end
end.