Vous êtes sur la page 1sur 3

Travaux dirigés : Exclusion mutuelle

Exercice 1 :

On va considérer que chaque tâche « i » consiste à afficher le message « J’exécute la tâche i ».

On va considérer que chaque tâche « i » est exécutée par le processus P i.

Pour que les tâches 1, 2, 3, 4, 5 et 6 se déroulent selon cet ordre, on va considérer les sémaphores
suivants :

Var s1, s2, s3, s4, s5, s6 ss7 : sémaphore ;

s1← 0 ; s2←0 ; s3←0 ; s4←0 ; s5←0 ; s6←0 ; s7←0 ;

Processus P1 Processus P2 Processus P3


Debut Debut Debut
Ecrire (« J’exécute la tâche 1 ») ; Wait(s1) ; Wait(s2)
Signal (s1) ; Ecrire (« J’exécute la tâche 2 ») ; Ecrire (« J’exécute la tâche 3 ») ;
Signal(s2) ; Signal (s4) ; Signal (s5) ;
Signal(s3) ; Fin ; Fin ;
Fin ;

Processus P4 Processus P5 Processus P6


Debut Debut Debut
Wait(s3) ; Wait(s4) ; Wait(s6) ;
Ecrire (« J’exécute la tâche 4 ») ; Wait(s5) ; Wait(s7) ;
Signal (s6) ; Ecrire (« J’exécute la tâche 5 ») ; Ecrire (« J’exécute la tâche 6 ») ;
Fin ; Signal (s7) ; Fin ;
Fin ;

Exercice 2 :

Var s : semaphore ;
s← N ;
Processus Client
Debut
Wait (s) ; /* Prendre un chariot*/
<Effectuer des achats> ;
Signal (s) ; /*Libérer le chariot*/
Fin ;
Avant d’accéder au magasin pour effectuer des achats, chaque client doit prendre un chariot. Or, le
nombre de chariots est N. Si tous les chariots sont pris, le client voulant entrer ne pourra pas car Wait(s)
avec s= 0 va le bloquer. Notez que chaque wait (s) effectuée auparavant (pour les clients ayant pu
accéder au magasin) faisait décrémenter s de 1. Une fois qu’un client quitte le magasin, il va libérer
un chariot ce qui est exprimé par signal(s). Cette instruction va incrémenter s de 1 et réveiller le client
qui était en attente du chariot, qui va le prendre et décrémenter à son tour s.

Exercice 3 :

Var s1, s2 : semaphore ;


s1← N ;
s2 ← C ;

Processus Nageur
Debut
Wait(s1) ; /*Prendre un panier*/
Wait(s2) ; /*Occuper une cabine*/
<Se Changer> ;
Signal(s2) ; /*Libérer la cabine*/
<Nager> ;
Wait (s2) ; /*Occuper une cabine*/
<Se Changer> ;
Signal(s2) ; /*Libérer la cabine*/
Signal(s1) ; /*Libérer panier*/
Fin ;

Exercice 4 :

Var mutex : semaphore ;


mutex ← 1 ;
nu← N ;

Processus Utilisateur_Ressource_R
Debut
Wait(mutex) ;
si (nu>0) alors
nu ← nu-1 ;
Signal (mutex) ;
<Utiliser R> ;
Wait (mutex) ;
nu ← nu +1 ;
fin si
signal (mutex) ;
Fin ;
Exercice 5 :

Var s : semaphore ;
s← M ;
Processus voiture
Debut
Wait (s) ;
<Acceder au parking> ;
Signal (s) ;
Fin ;

Vous aimerez peut-être aussi