1. 程式人生 > >C# lock 語法糖實現原理--《.NET Core 底層入門》之自旋鎖,互斥鎖,混合鎖,讀寫鎖

C# lock 語法糖實現原理--《.NET Core 底層入門》之自旋鎖,互斥鎖,混合鎖,讀寫鎖

在多執行緒環境中,多個執行緒可能會同時訪問同一個資源,為了避免訪問發生衝突,可以根據訪問的複雜程度採取不同的措施 原子操作適用於簡單的單個操作,無鎖演算法適用於相對簡單的一連串操作,而執行緒鎖適用於複雜的一連串操作 ### 原子操作 修改狀態要麼成功且狀態改變,要麼失敗且狀態不變,並且外部只能觀察到修改前或者修改後的狀態,修改中途的狀態不能被觀察到 .NET 中,System.Threading.Interlocked 類提供了用於執行原子操作的函式,這些函式接收引用引數(ref),也就是變數的記憶體地址,然後針對該記憶體地址中的值執行原子操作 ### 無鎖演算法 不使用執行緒鎖,通過修改操作的內容使它們滿足原子操作的條件 .NET 提供了一些執行緒安全的資料型別,這些資料型別大量應用了無鎖演算法來提升訪問速度(在部分情況下仍需要執行緒鎖): System.Collections.Consurrent.CurrentBag System.Collections.Consurrent.CurrentDictionary