CAS鎖是什麼?

CAS(Compare and swap),即比較並交換,也是實現我們平時所說的自旋鎖或樂觀鎖的核心操作。

它的實現很簡單,就是用一個預期的值和內存值進行比較,如果兩個值相等,就用預期的值替換內存值,並返回 true。否則,返回 false。

保證原子操作

任何技術的出現都是爲了解決某些特定的問題, CAS 要解決的問題就是保證原子操作。原子操作是什麼,原子就是最小不可拆分的,原子操作就是最小不可拆分的操作,也就是說操作一旦開始,就不能被打斷,直到操作完成。在多線程環境下,原子操作是保證線程安全的重要手段。舉個例子來說,假設有兩個線程在工作,都想對某個值做修改,就拿自增操作來說吧,要對一個整數 i 進行自增操作,需要基本的三個步驟:

1、讀取 i 的當前值;

2、對 i 值進行加 1 操作;

3、將 i 值寫回內存;

假設兩個進程都讀取了 i 的當前值,假設是 0,這時候 A 線程對 i 加 1 了,B 線程也 加 1,最後 i 的是 1 ,而不是 2。這就是因爲自增操作不是原子操作,分成的這三個步驟可以被幹擾。如下面這個例子,10個線程,每個線程都執行 10000 次 i++ 操作,我們期望的值是 100,000,但是很遺憾,結果總是小於 100,000 的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章