Vous êtes sur la page 1sur 1

COIFFEUR Il s'agit de synchroniser les activits du coiffeur et de ses clients avec des smaphores.

Les smaphores utiliss sont initialiss ainsi :

2.Pour viter la formation du cycle dans le graphe d'attente, il suffit de respecter un ordre global d'allocation. Par exemple, l'ordre A,B,C. Les processus P1 et P2 restent inchangs et le processus P3 doit par contre demander d'abord la ressource A puis la ressource C afin de respecter l'ordre global. MULTIPRO ET Smaphors 1.Cette implantation est fausse car si l'opration P est bloquante (s.val == 0), alors l'opration ne se termine pas en bouclant indfiniment sur le test de s.val. En effet, cette boucle est excute en exclusion mutuelle (s.mutex est vrouill) et par cons quent, toute autre opration V reste impossible. 2.Il suffit d'ouvrir une ``fentre'' dverrouillant s.mutex entre chaque test de la valeur s.val. Par exemple, P devient : P(Semaphore s) { while (TAS(s.mutex)<0) do { } ; while (s.val == 0 ) do { s.mutex = 0 ; /* fentre */ while (TAS(s.mutex)<0) do { } ; }; /* TAS(s.mutex) == 0 && s.val > 0 */ s.val = s.val - 1; s.mutex = 0 ; } Pourquoi la solution suivante est fausse (souvent propose) ? while ((TAS(s.mutex)<0) || (s.val == 0)) do s.mutex = 0 ; /* TAS(s.mutex) == 0 && s.val > 0 */ s.val = s.val - 1; s.mutex = 0 ; 3.Cette solution n'est pas adapte un monoprocesseur car elle entrane l'excution de boucles d'attente active. Transactions et srialisation 1.Ces deux transactions ne respectent pas le principe des transactions deux phases : toute transaction doit comporter une premire phase pendant laquelle elle peut acqurir des droits d'accs (verrous) sur des ressources. Cette phase ne peut tre suivie que d'une phase de libration pendant laquelle la transaction ne peut que librer l'accs des ressources qu'elle utilisait. Cette rgle assure, dans une approche pessimiste par verrouillage, que toutes les squences d'excution sont srialisables. 2.Dans le cas prsent, le non -respect du principe des deux phases permet un entrelacement des actions des deux transactions sur le compteur C2. Cependant, le rsultat reste toujours quivalent l'affectation C2 := C2 + v - w. Ce rsultat est bien celui obtenue par une excution strictement squentielle des deux transactions. 3.Ce rsultat chanceux tient au fait que l'addition et la soustraction peuvent commuter v - w == -w + v

Init (SCF, 0); Init (SP, 0); Init (SX, 1);


SX : assure l'accs en exclusion mutuelle la variable Attend. Attendpermet de contrler la taille maximale de la file d'attente SP : gre la file des clients en attente. Indique le nombre de ressources pour le coiffeur, c'est dire le nombre de clients en attente, SCF : gre l'accs au fauteil du coiffeur. Indiq ue si le coiffeur est prt travailler ou non (il est la essource unique des clients). a- Coiffeur

y y y y
b-Client

prend le 1er client de la file, s'il y en a un (sinon il se bloque) dcrmente Attend (accs exclusif) libre le sige du client (l'invite s'asseoir) Coiffe

y y y y y

incrmente Attend (accs exclusif) Si le nombre de clients en attente est suprieur N, sort s'ajoute la file d'attente attend de pouvoir s'asseoir dans le sige du coiffeur se fait coiffer et sort.

Programme client : Client() { P(SX); if(Attend < N) { Attend = Attend + 1; V (SP); V (SX); P (SCF); SeFaireCoifferEtSortir(); } else { V(SX); Sortir(); } } Programme coiffeur : Coiffeur(){ while (1){ P(SP); P(SX); Attend = Attend -1; V(SCF); V(SX); Coiffer(); }} 1.Si les trois processus russissent obtenir chacun leur premire ressource, les trois ressources sont dsormais alloues et les trois processus resteront bloqus sur leur deuxime demande de ressource.

Figure 1: tat d'interblocage

Vous aimerez peut-être aussi