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 :