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:

  1. 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;).

  2. 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;).

  3. 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.