CAS實現實現無鎖機制

無關緊要的話

因爲最近要考慮實現一種無鎖的hashmap,面對多線程操作併發執行時可能出現的不一致問題,所以特意學習了一下CAS,也算是有所得吧。


正文

1.什麼是CAS?

有的時候我們想進行一系列操作,而這不是原子性的,在多線程環境下,就很有可能會出現不一致的情況,舉個栗子:

比如我們想進行counter++(假設其初始值爲0)操作,如果是單線程,則執行流程大概如下:

  1. 取得counter的值
  2. 然後對其進行+1操作
  3. 將新值返回

如果在進行到第二步的時候又有一個新的線程到來,也是想將當前的counter的值增1,按道理來講,兩個線程執行結束counter的值應該2,但是實際執行過程中會發生什麼?

原子性加減通常是用CAS(Compare and Swap)完成的,與平臺相關。CAS的基本形式是:CAS(addr,old,new),當addr中存放的值等於old時,用new對其替換),要注意的是其針對的是8B的操作有效,也就是針對一個地址是可行的。 當前值與期望值相等時,修改當前值爲設定值,返回true;當前值與期望值不等時,將期望值修改爲當前值,返回false。

2.

發佈了57 篇原創文章 · 獲贊 36 · 訪問量 7050
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章