Я изучал Искусство многопроцессорного программирования 1, и их тексту не хватает ясности, как и книге, на которую вы ссылаетесь. Вот некоторые цитаты из TAMPP:
Цитата 1 (определение без блокировки)
Метод не блокируется, если он гарантирует, что бесконечно часто вызов какого-либо метода завершается за конечное число шагов.
Цитата 2 (Определение неблокирования)
ожидающий вызов метода total никогда не требуется для ожидания завершения другого ожидающего вызова.
Цитата 3 (утверждают, что блокировка без блокирования)
Условия выполнения без блокировки и без блокировок гарантируют, что вычисления в целом будут выполняться независимо от того, как система планирует потоки.
Проблема заключается в том, что утверждение в цитате 3, очевидно, не следует из определения в цитате 1. Как уже упоминалось, синхронизированная очередь, кажется, удовлетворяет цитате 1: бесконечно часто какой-либо метод успешно получает блокировку и завершается.
Обратите особое внимание на довольно расплывчатую фразу в цитате 3: «независимо от того, как система планирует потоки». Этому не предшествует какое-либо формальное описание «системы планирования потоков», поэтому нам остается реконструировать ее свойства на основе наших предварительных представлений о том, что определения должны означать:
- система всегда выполняет инструкции некоторого потока;
- она никогда не может выполнять инструкции любой данной нити;
- все потоки вызывают рассматриваемый метод.
В такой системе метод блокировки не может быть свободным от блокировки: если поток, удерживающий блокировку, больше никогда не запланирован для выполнения, не будет другого потока, который мог бы завершить свой вызов метода за конечное число шагов, но при этом будет некоторые потоки, которые выполняют шаги метода. Для более реалистичной системы, которая гарантирует предоставление процессорного времени каждому потоку, определение должно явно включать свойство неблокирования:
Исправлено определение без блокировки
Метод не блокируется, если он неблокирующий, и, кроме того, гарантирует, что бесконечно часто вызов некоторого метода завершается за конечное число шагов.
1 Морис Херлихи, Нир Шавит, Искусство многопроцессорного программирования, Elsevier 2008, стр. 58-60