本章主要內容
上一章中,我們了解了在設計并發(fā)數據結構時會遇到的問題,根據指導意見指引,確定設計的安全性。對一些通用數據結構進行檢查,并查看使用互斥鎖對共享數據進行保護的實現(xiàn)例子。第一組例子就是使用單個互斥量來保護整個數據結構,但之后的例子就會使用多個鎖來保護數據結構的不同部分,并且允許對數據結構進行更高級別的并發(fā)訪問。
互斥量是一個強大的工具,其可以保證在多線程情況下可以安全的訪問數據結構,并且不會有條件競爭或破壞不變量的情況存在。對于使用互斥量的代碼,其原因也是很簡單的:就是讓互斥量來保護數據。不過,這并不會如你所想的那樣;你可以回看一下第3章,回顧一下死鎖形成的原因,再回顧一下基于鎖的隊列和查詢表的例子,看一下細粒度鎖是如何影響并發(fā)的。如果你能寫出一個無鎖并發(fā)安全的數據結構,那么就能避免這些問題。
在本章中,我們還會使用原子操作(第5章介紹)的“內存序”特性,并使用這個特性來構建無鎖數據結構。設計這樣的數據結構時,要格外的小心,因為這樣的數據機構不是那么容易正確實現(xiàn)的,并且讓其失敗的條件很難復現(xiàn)。我們將從無鎖數據的定義開始;而后,將繼續(xù)通過幾個例子來了解使用無鎖數據結構的意義,最后給出一些通用的指導意見。