Académique Documents
Professionnel Documents
Culture Documents
Mme ACHEMOUKH
1
Synchronisation par Moniteur
File d’attente
Variables locales
Initialisation
6
Exercice n° 1: (Le problème du rond-point)
processus véhicule
début Procédure Moniteur
... ²
Section critique
rond-point.Entrer(i);
<tourner dans le rond-point de i à j (dans le bon sens )>
rond-point.Sortir(j);
...
fin Procédure Moniteur
7
Exercice n° 1: (Le problème du rond-point)
occuper= vrai
9
Exercice n° 1: (Le problème du rond-point)
Rond_Point: Moniteur ;
var occuper : boolean ; Si Rond-Point occupé
accès : condition ; Alors mettre le
² processus vehicule en file
Procedure Entrer() ; d’attente
Debut
si occuper alors
accés.attendre;
Finsi Rond-Point occupé
occuper:=vrai;
Fin_Entrer;
10
Exercice n° 1: (Le problème du rond-point)
1- Programme du moniteur en supposant qu’un véhicule peut entrer dans le rond-
point ssi aucun autre véhicule n’est déjà présent dans le rond-point :
Rond_Point: Moniteur ;
var occuper : boolean ;
accès : condition ; Rond-point libre
Procedure Sortir();
Debut ²
INIT() /* initialisation*/
occuper:=faux; Etat initial
Rond-point libre
Fin _Rond_point.
11
Exercice n° 1: (Le problème du rond-point)
14
Exercice n° 1: (Le problème du rond-point)
Rond_Point: Moniteur ;
Crée un type voie
Finsi
bloquer les processus de
si (v ≠ vc) alors
la voie v
accés[v].attendre ;
Finsi
n :=n+1 ; Conditions vérifiées :
-Nbr de voitures est incrémenté
accés[v].signaler ; - Réveil en chaîne des voitures de la
Fin_Entrer. file liée à la voie v 16
Exercice n° 1: (Le problème du rond-point)
2- Programme du moniteur en supposant qu’il y a partage de l’accès par les
véhicules issus d’une même voie :
Rond_Point: Moniteur ;
Procedure Sortir(); Nbr de voitures est
décrémenté
var i : entier ;
Debut
n :=n-1 ; ² Changement de la voie
courante
i :=0 ;
Tantque (n=0) et (i<N-1) faire
vc :=(vc+1) MOD N ;
accés[vc].signaler ; Signaler à la file liée à la
voie vc que l’accès est
i :=i+1 ;
libre
Fin_Tantque ;
Fin_Sortir .
17
Exercice n° 1: (Le problème du rond-point)
Rond_Point: Moniteur ;
Const N=3 ;
Type voie = 0.. N-1 ;
Var accés = tableau [voie] de condition ;
²
vc: voie ;
n :entier ;
Procedure Entrer(v :voie) ;
Procedure Sortir();
INIT() /*
initialisation*/
n:=0
Fin _Rond_point. 18
Exercice n° 1: (Le problème du rond-point)
²
Réveil en chaîne
attente
-- Conditions d’accès au rond-point :
n=0 (rond- point libre)
ou voie (voiture)= voie courante