Если вы пролистаете одну страницу вниз со страницы 205 книги «Искусство многопроцессорного программирования» (Elsevier, 2012 ISBN 978), на страницу 206 (раздел 9.6 «Оптимистическая синхронизация»): https://books.google.com/... вы увидите, как добавить/удалить/содержит методы для оптимистической синхронизации (рис. 9.11. Класс OptimisticList
: метод add()
обходит список, игнорируя блокировки, блокирует блокировки и проверяет перед добавлением нового узла. Рисунок 9.12. Класс OptimisticList
: метод remove()
перемещается, игнорируя блокировки, приобретает блокировки и проверяет удаление узла. page copy).Оптимистическая синхронизация без ожидания для добавления, удаления и содержит?
В следующем разделе, посвященной ленивым синхронизации, он переходит к состоянию (со ссылкой на оптимистическую синхронизацию)
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
Это, кажется, говорят о том, что содержит метод не ждать, свободным, и, следовательно, ни методы добавления, ни удаления не будут. Но я не могу понять, почему это так.
Реализация всех 3 методов вызывает .lock(), что может подождать. Вот почему они не без ожидания. – Tsyvarev