Vous êtes sur la page 1sur 3

Type Troncon = moniteur

Var
type Statut =(repos,demandeNS,demandeSN, entrerNS,entrerSN,sortirNS,sortirSN);
var nbtrains : entier;
Statut etat[nbtrains];
Accès_Nord[nbtains] ; Accès_Sud[nbtrains] : condition ;

Procédure Entry Entrée_Nord(entier i) ;


Debut
var j : entier;
P : boolean;

etat[i]=demande;
p = true
j=0
tant que ( p == true) && ( j != nbtrains) faire
si (j!=i) alors
si (etat[j] == entrerSN) alors
accés_Nord[i].wait;
p = false;
finsi
finsi
j = j+1
fin tantque

si (p = true) alors
etat[i] = entrerNS;
finsi;

fin

Procédure Entry Sortie_Sud(entier i) ;


Debut
var j,k : entier;
P,vide : boolean;
etat[i] = sortirNS;
p = false;
vide = true;
j,k=0;
tantque(vide == true) && ( k != nbtrains) faire
si(nbtrains[k] == entrerNS) alors
vide = false;
fintantque
si (vide == true) alors
tant que ( p == false) && ( j != nbtrains) faire
si (j!=i) faire
si (etat[j] == demandeSN) alors
accés_Sud[j].signal;
etat[j] = entrerSN;
p = true
finsi
finsi
j = j+1
fin tantque
finsi
Fin

Procédure Entry Entrée_Sud(entier i) ;


Debut
var j : entier;
P : boolean;
etat[i]=demande;
p = true
j=0
tant que ( p == true) && ( j != nbtrains) faire
si (j!=i) alors
si (etat[j] == entrerNS) alors
p = false
accés_Sud[i].wait;
finsi
finsi
j = j+1
fin tantque

si (p = true) alors
etat[i] = entrer;
finsi;

fin

Procédure Entry Sortie_Nord(entier i) ;


Debut
var j,k : entier;
P,vide : boolean;
etat[i] = sortirSN;
p = false;
vide = true;
j,k=0;
tantque(vide == true) && ( k != nbtrains) faire
si(nbtrains[k] == entrerSN) alors
vide = false;
fintantque
si (vide == true) alors
tant que ( p == false) && ( j != nbtrains) faire
si (j!=i) faire
si (etat[j] == demandeNS) alors
accés_Nord[j].signal;
etat[j] = entrerNS;
p = true
finsi
finsi
j = j+1
fin tantque
finsi
Fin

Début
Pour i de 0 à nbtrains faire
etat[i]=repos;
finpour
ecrire("donner le nombre des trains");
lire(nbtrains);
Fin

Vous aimerez peut-être aussi