SynchronisationExemple d’un compteur accédé par 2 processus :
P1 R1 = cpt (a) R1 = R1 +1 (b) cpt = R1 (c) |
cpt = 0 |
P2 R1’ = cpt (a’) R1’ = R1’ +1 (b’) cpt = R1’ (c’) |
a, a’, b, b’, c, c’ è cpt = 1 a, b, c, a’, b’, c’ è cpt =2 Dans ce cas on a un partage de ressource en coopération. On peut aussi avoir un partage de ressource en compétition.
Exemple de lecture écriture sur un disque :
positionner(20) lire |
positionner(80) ecrire(v) |
Chaque ligne est atomique mais pas l’ensemble. On a partage car, évidemment, dans le cas séquentiel, le problème de l’atomicité ne se pose pas !
Exemple type de coopération, problème du producteur/consommateur : file d’attente avec buffer.
produire(v) |
17 |
04 |
02 |
00 |
00 |
00 |
consommer(v) |
tampon |
Pour éviter les erreurs, il faut que produire et consommer soient atomiques (cf DIIC TP ARC2).
De manière générale, les mises en œuvres de système doivent vérifier 2 propriétés :
- SURETE (Safety) " bad things will not happen " INVARIANT
- VIVACITE (Liveness) " Something will happen "
|