Studiowałem The Art of Multiprocessor Programming 1, a ich tekst jest niejasny, podobnie jak książka, do której się odwołujesz. Oto kilka cytatów z TAMPP:
Cytat 1 (Definicja bez blokady)
Metoda jest bez blokady, jeśli gwarantuje, że nieskończenie często niektóre wywołania metod kończą się w skończonej liczbie kroków.
Cytat 2 (Definicja nieblokowania)
oczekujące wywołanie metody total nigdy nie jest wymagane do oczekiwania na zakończenie innego oczekującego wywołania.
Cytat 3 (twierdzenie, że bez blokady nie blokuje się)
Warunki oczekiwania bez blokowania i bez blokowania gwarantują postęp obliczeń jako całości, niezależnie od tego, jak system planuje wątki.
Problem polega na tym, że twierdzenie z cytatu 3 nie wynika oczywiście z definicji z cytatu 1. Jak już wspomniano, zsynchronizowana kolejka wydaje się spełniać cytat 1: nieskończenie często jakaś metoda z powodzeniem uzyskuje blokadę i kończy.
Zwróć uwagę na dość niejasne zdanie w cytacie 3: „niezależnie od tego, jak system planuje wątki”. Nie jest to poprzedzone żadnym formalnym opisem „systemu szeregowania wątków”, więc pozostaje nam zrekonstruować jego właściwości w oparciu o nasze wstępne założenia, co powinny oznaczać definicje :
- system zawsze wykonuje instrukcje jakiegoś wątku;
- nigdy nie może wykonywać instrukcji dla danego wątku;
- wszystkie wątki wywołują rozważaną metodę.
W takim systemie metoda blokowania nie może być wolna od blokady: jeśli wątek przytrzymujący blokadę nigdy nie zostanie ponownie zaplanowany do wykonania, nie będzie innego wątku, który mógłby ukończyć wywołanie metody w skończonej liczbie kroków, ale będzie niektóre wątki wykonujące kroki metody. W przypadku bardziej realistycznego systemu, który gwarantuje, że w końcu da się czas procesora każdemu wątkowi, definicja musi wyraźnie zawierać właściwość nieblokującą:
Poprawiona definicja bez blokady
Metoda jest wolna od blokady, jeśli nie jest blokująca, a dodatkowo gwarantuje, że nieskończenie często niektóre wywołania metod kończą się w skończonej liczbie kroków.
1 Maurice Herlihy, Nir Shavit, The Art of Multiprocessor Programming, Elsevier 2008, ss. 58–60