回覆列表
  • 1 # 每天學點程式設計技巧

    現在的無鎖設計得益於CPU對CAS操作的支援。所以想理解無鎖設計首先明白什麼是CAS。

    CAS是Compare and Swap的縮寫,翻譯成中文就是“比較並交換”。它的實現是這樣的:有三個運算元,記憶體值V,舊的預期值A,要修改的新值B。當且僅當預期值和記憶體值相同時,將記憶體值V修改為B,否則什麼都不做。

    下面舉一個例子來解釋一下CAS演算法。假設現在有t1和t2兩個執行緒都同時去訪問同一個變數10。所以他們會把主記憶體的值完全複製一份到自己的工作記憶體空間,所以t1和t2執行緒的預期值都是10。

    假設t1和t2競爭時t1成功的將變數值修改為了11,然後寫到了記憶體中。t2執行更新時發現記憶體值變成了11與預期值10不一致,也就是這次更新失敗了,然後重新執行剛才的操作。

    CAS操作類似於commit-retry模式。當同步衝突出現的機會比較少時,效能會得到很大的提升。

    雖然CAS高效的解決了原子操作,但是還是存在三大問題:ABA問題、自旋CAS迴圈時間長開銷大、一次CAS只能保證一個變數的原子操作。針對這三個問題,不同語言都給出瞭解決方案,想詳細瞭解的可以查詢自己關注開發語言的解決方案。

    由於對硬體知識缺乏,想了解cpu是如何實現的CAS的可以檢視CPU相關資料。

  • 中秋節和大豐收的關聯?
  • 自考專升本再考研,容易嗎?