Exercice 1 : Implémentation à gros grain
Question 1
Cette implémentation est linéarisable car chaque opération (add, remove, contains) est protégée par un verrou global
(lock.lock()), ce qui empêche toute interférence entre les threads. Donnons les points de linéarisation:
-
add(Integer item) : Le point de linéarisation est le moment où le nouveau nœud est inséré dans la liste (ligne pred.next = node;).
-
remove(Integer item) : Le point de linéarisation est le moment où le nœud est retiré de la liste (ligne pred.next = curr.next;).
-
contains(Integer item) : Le point de linéarisation est le moment où la clé est comparée avec la clé du nœud courant (ligne if (key == curr.key)).
Question 2
Voir l’implémentation fournie dans la classe MyThread.
Question 3
Voir l’implémentation fournie dans la classe Main.
Exercice 2 : Implémentation à grain fin
Question 1
Voir l’implémentation fournie dans le classe MonSet2
Question 2
Cette implémentation est également linéarisable. Les points de linéarisation sont les mêmes que pour l’implémentation à gros grain.
Question 3
Voir l’implémentation fournie dans la classe Main.