Если вы прокрутите одну страницу вниз со страницы 205 книги «Искусство многопроцессорного программирования» (Elsevier, 2012 ISBN 9780123977953) до страницы 206 (раздел 9.6 Оптимистическая синхронизация): HTTPS: //books.google.com/... вы увидите методы add/remove/contains для оптимистичной синхронизации (рис. 9.11. Класс OptimisticList
: метод add()
просматривает список, игнорируя блокировки, получает блокировки и проверяет перед добавлением нового узла Рисунок 9.12. Класс OptimisticList
: метод remove()
игнорирует блокировки, получает блокировки и проверяет их перед удалением узла. копия страницы).
В следующем разделе о ленивой синхронизации говорится (со ссылкой на оптимистическую синхронизацию)
The next step is to refine this algorithm so that contains() calls are wait-free, and add() and remove() methods, while still blocking, traverse the list only once
Кажется, это говорит о том, что метод contains не является бесплатным для ожидания, и, следовательно, методы добавления или удаления не будут такими же. Но я не могу понять, почему это так.