如果您從書籍「多處理器編程的藝術」(Elsevier,2012 ISBN 978)的第205頁向下滾動一頁到第206頁(第9.6節「樂觀同步」):https://books.google.com/...,您將看到add/remove/contains樂觀同步的方法(圖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
這似乎是說,contains方法不等待自由,所以添加或刪除方法也不會。但我似乎無法明白爲什麼會這樣。
執行所有3個方法調用.lock(),它可能會等待。這就是爲什麼他們不等待。 – Tsyvarev