J'ai étudié The Art of Multiprocessor Programming 1 et leur texte manque de clarté, tout comme le livre auquel vous vous référez. Voici quelques citations de TAMPP:
Citation 1 (Définition de sans verrou)
Une méthode est sans verrouillage si elle garantit que, infiniment souvent, un appel de méthode se termine en un nombre fini d'étapes.
Citation 2 (Définition de non blocage)
un appel en attente d'une méthode totale n'est jamais nécessaire pour attendre qu'un autre appel en attente se termine.
Citation 3 (affirmer que le verrouillage est non bloquant)
Les conditions de progression non bloquante sans attente et sans verrouillage garantissent que le calcul dans son ensemble progresse, indépendamment de la façon dont le système planifie les threads.
Le problème est que la revendication de la citation 3 ne découle évidemment pas de la définition de la citation 1. Comme déjà mentionné, une file d'attente synchronisée semble satisfaire la citation 1: infiniment souvent, une méthode réussit à acquérir le verrou et à se terminer.
Notez spécifiquement la phrase assez vague de la citation 3: "indépendamment de la façon dont le système planifie les threads". Ceci n'est précédé d'aucune sorte de description formelle du «système d'ordonnancement des threads», il nous reste donc à reconstruire ses propriétés en fonction de nos idées préconçues sur ce que les définitions devraient signifier:
- le système exécute toujours les instructions d' un thread;
- il ne peut jamais exécuter les instructions d'un thread donné ;
- tous les threads invoquent la méthode considérée.
Sur un tel système, une méthode de blocage ne peut pas être sans verrou: si le thread qui détient le verrou n'est plus jamais planifié pour exécution, il n'y aura pas d'autre thread qui puisse terminer son invocation de méthode en un nombre fini d'étapes, mais il y aura certains threads qui exécutent des étapes de la méthode. Pour un système plus réaliste, celui qui garantit de donner éventuellement du temps CPU à chaque thread, la définition doit inclure explicitement la propriété non bloquante:
Définition corrigée du verrouillage sans verrouillage
Une méthode est sans verrouillage si elle n'est pas bloquante et, en outre, garantit que infiniment souvent un appel de méthode se termine en un nombre fini d'étapes.
1 Maurice Herlihy, Nir Shavit, The Art of Multiprocessor Programming, Elsevier 2008, pp. 58-60