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.val1
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.val1
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.val1, S2.val0, S3.val0
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.val1 //pour que P1 puisse commencer le premier.
S23.val0 //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.val2, mutexA.val1, mutexB.val1, mutexC.val1
nb_A0, nb_B0, nb_C0
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_Anb_A - 1 nb_Bnb_B - 1 nb_Cnb_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 stadefamine !
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.val1
mutex.val1
voit.val3
nb_voiture0
Processus Camion Processus Voiture
P(mutex)
nb_voiturenb_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_voiturenb_voiture -1
Si (nb_voiture=0)
alors V(pont)
Finsi
V(mutex)