Exercice 1
Question 1
Oui, le thread ne termine pas, car il ne revérifie pas si la variable change,
parce qu’elle n’est pas modifiée dans son scope.
Question 2
Le thread désormais termine. synchronized(I){}
force le thread Lecteur à
accéder à la mémoire principale à chaque itération.
Question 3
Le thread ne termine pas, parce qu’il n’est pas au courant que la
variable est changée.
Question 4
Maintenant le thread termine, car la variable observée dans le while
est marquée
comme volatile
, c’est-à-dire qu’il n’y a pas d’optimisation lors de l’exécution
et donc elle est réellement vérifiée à chaque itération.
Question 5
Oui, le thread ne termine pas, parce qu’il ne revérifie pas si la variable change,
parce qu’elle n’est pas modifiée dans son scope. Le fait qu’on interagit avec un
tableau et non une variable ne change rien.
Question 6
Désormais le thread termine, car le tableau est marqué comme volatile
.
Question 7
Oui, le mot-clé volatile
se propage même sur les tableaux de tableaux.
Question 8
La variable est une référence au tableau t[0]
, ce qui ne change pas le problème
de visibilité de t[0][0]
.
Question 9
Oui le thread termine, parce que rendre une classe volatile permet de rendre
tous ses attributs volatile
.
Question 10
Non le thread ne termine plus, car on utilise dorénavant une variable qui n’est
pas explicitement volatile, donc la variable n’est pas vérifiée à chaque itération.
Exercice 2
Question 3
- Sans équité : Le verrou peut donner plusieurs fois l’accès à la même thread avant une autre.
- Avec équité : Le verrou respecte l’ordre d’arrivée.
Question 5
a
Non, car label[j]
pourrait être réinitialisé si j
se relance.
b
Oui, car j
attribuera un label plus grand que i
.
c
Toutes celles ayant un label plus petit.
Question 6
$ java Question
Thread-0 en SC #1
Thread-0 quitte la SC
Thread-1 en SC #1
Thread-1 quitte la SC
Thread-3 en SC #1
Thread-3 quitte la SC
Thread-2 en SC #1
Thread-2 quitte la SC
Thread-4 en SC #1
Thread-4 quitte la SC
Thread-5 en SC #1
Thread-5 quitte la SC
Thread-6 en SC #1
Thread-6 quitte la SC
Thread-7 en SC #1
Thread-7 quitte la SC
Thread-8 en SC #1
Thread-8 quitte la SC
Thread-9 en SC #1
Thread-9 quitte la SC
... ça se répète ...
Thread-0 en SC #20
Thread-0 quitte la SC
Thread-1 en SC #20
Thread-1 quitte la SC
Thread-3 en SC #20
Thread-3 quitte la SC
Thread-2 en SC #20
Thread-2 quitte la SC
Thread-4 en SC #20
Thread-4 quitte la SC
Thread-5 en SC #20
Thread-5 quitte la SC
Thread-6 en SC #20
Thread-6 quitte la SC
Thread-7 en SC #20
Thread-7 quitte la SC
Thread-8 en SC #20
Thread-8 quitte la SC
Thread-9 en SC #20
Thread-9 quitte la SC
Question 7
Non, on ne peut pas se verrouiller deux fois parce que chaque thread
doit reprendre un label avec d’entrer en section critique, il devrait donc
attendre qu’il se redonne lui-même la main.