Exercice 1
Question 2
Version 1
Un seul objet ThreadID est partagé, et chaque thread utilise le même ThreadID pour générer ses identifiants
Version 2
Un nouvel objet ThreadID est créé dans chaque thread au moment de l’exécution
Exercice 2
Question 1
value
et valuebis
ne font pas 5000 + 1000
Question 2
On peut rendre la méthode add
synchronized
Question 3
value
est partagée entre tous les threads et représente une ressource commune
last
garde une valeur spécifique à chaque thread
Exercice 3
Question 1
Non
Question 2
Les threads ne sont pas synchronisés
Question 3
Non
Question 4
Il faut utiliser une variable de verrou partagé entre tous les threads (static
)
Exercice 4
Avec volatile
La variable check
est visible immédiatement pour tous les threads
Sans volatile
Les threads peuvent voir des versions différentes de la variable check
Exercice 5
Question 1
a
Oui. 10 threads peuvent être au niveau 1 au même moment
b
Non. Chaque thread qui atteint le niveau 2 vérifie si d’autres threads sont déjà au même niveau ou plus haut, en tenant compte de victim
c
Oui. Si aucun thread n’est au niveau supérieur, la condition pour attendre dans l’attente active est ok
d
Oui. Une configuration avec laquelle neuf threads atteignent le niveau 2 peut exister
e
Non. Au niveau 3, le maximum est (10 - 3 + 1) = 8 threads
f
Si un thread est en section critique (niveau n - 1 = 9), alors les autres threads doivent être à des niveaux inférieurs
g
Au niveau j, chaque thread bloque un thread de niveau inférieur avant de progresser, limitant ainsi le nombre de threads simultanés à n − j + 1
h
L’algorithme garantit que chaque thread progresse à travers les niveaux sans interblocage, car il utilise des priorités explicites avec victim
.
i
L’algorithme garantit l’équité FIFO :
- Le mécanisme de
victim
assure qu’un thread qui attend depuis longtemps finira par avoir priorité - Les threads qui arrivent plus tard ne peuvent pas “doubler” un thread qui attend déjà à un niveau donné