Vous êtes sur la page 1sur 3

Correction du TD n°3

Communication et synchronisation entre


processus
Exercice 1
1. Soit la séquence d’exécution suivante :
- P1 exécute P(mutex1)
- P2 exécute P(mutex2)
- P3 exécute P (mutex1) et se bloque
- P1 exécute P(mutex2) et se bloque
 P3 est bloqué alors qu’aucun processus n’utilise la variable in.
 L’avancement n’est pas garanti.
 La proposition n’est pas correcte.
2. Solution : désassocier l’utilisation de in et out dans le code de P1comme suit :
Processus P1 Processus P2 Processus P3
P(mutex2) P(mutex2) P(mutex1)
out out + 1 out out -1 in  in + 1
V(mutex2) V(mutex2) V(mutex1)
P(mutex1)
in  in -1
V(mutex1)

Exercice 2
mutex : sémaphore
mutex.val1
Processus A Processus B
Rouler_G_D Rouler_D_G
P(mutex) P(mutex)
Rouler-tunnel Rouler-tunnel
V(mutex) V(mutex)
Rouler_G_D Rouler_D_G

Exercice 3
1. C’est un problème d’exclusion mutuelle. Donc, il faut utiliser le même sémaphore pour les
trois processus.
mutex : sémaphore
mutex.val1

Processus P1 Processus P2 Processus P3


Début Début Début
Cycle Cycle Cycle
P(mutex) P(mutex) P(mutex)
A1 A2 A3
V(mutex) V(mutex) V(mutex)
Fin Cycle Fin Cycle Fin Cycle
Fin Fin Fin
2.
S1, S2 S3 :sémaphore
S1.val1, S2.val0, S3.val0
Processus P1 Processus P2 Processus P3
Début Début Début
Cycle Cycle Cycle
P(S1) P(S2) P(S3)
A1 A2 A3
V(S2) V(S3) V(S1)
Fin Cycle Fin Cycle Fin Cycle
Fin Fin Fin

3.
S1, S23: sémaphore
S1.val1 //pour que P1 puisse commencer le premier.
S23.val0 //pour bloquer P2 et P3 au début.

Processus P1 Processus P2 Processus P3


Début Début Début
Cycle Cycle Cycle
P(S1) P(S23) P(S23)
A1 A2 A3
V(S23) V(S1) V(S1)
Fin Cycle Fin Cycle Fin Cycle
Fin Fin Fin

Exercice 4
1. La section critique est Jouer ( ).Ainsi, la solution est :
stade, mutexA, mutexB, mutexC: sémaphore
nb_A, nb_B, nb_C : entier
stade.val2, mutexA.val1, mutexB.val1, mutexC.val1
nb_A0, nb_B0, nb_C0
Processus A Processus B Processus C
Début Début Début
P(mutexA) P(mutexB) P(mutexC)
nb_A nb_A+1 nb_B nb_B+1 nb_C nb_C+1
Si (nb_A = 1) Si (nb_B = 1) Si (nb_C = 1)
alors P(stade) alors P(stade) alors P(stade)
Finsi Finsi Finsi
V(mutexA) V(mutexB) V(mutexC)
Jouer ( ) Jouer ( ) Jouer ( )
P(mutexA) P(mutexB) P(mutexC)
nb_Anb_A - 1 nb_Bnb_B - 1 nb_Cnb_C - 1
Si (nb_A = 0) Si (nb_B = 0) Si (nb_C = 0)
alors V(stade) alors V(stade) alors V(stade)
Finsi Finsi Finsi
V(mutexA) V(mutexB) V(mutexC)
Fin Fin Fin
2.Oui, il y a un risque de famine :
- si le club A et B occupent le stade alors si des athlètes du club C arrivent, ils doivent
attendre  c’est correcte
- Mais, si des athlètes des clubs A et B viennent d’une façon continue, les athlètes du
club C vont indéfiniment attendre pour entrer au stadefamine !

Exercice 5
C’est un problème Lecteur/Rédacteur : Voiture/Camion avec accès autorisé pour 3 voitures au
maximum. Alors la solution est :
pont, mutex, voit : sémaphore
nb_voiture : entier
pont.val1
mutex.val1
voit.val3
nb_voiture0
Processus Camion Processus Voiture
P(mutex)
nb_voiturenb_voiture + 1
P(pont) Si (nb_voiture=1)
Camion_roule alors P(pont)
V(pont) Finsi
V(mutex)
P(voit)
Voiture_roule
V(voit)
P(mutex)
nb_voiturenb_voiture -1
Si (nb_voiture=0)
alors V(pont)
Finsi
V(mutex)

Vous aimerez peut-être aussi