天天看點

07Java多線程-29. CAS算法

在談CAS算法時,我們先來了解一下無鎖的概念。

無鎖分為以下兩大派系:

對于樂觀派系而言,它們認為事情總會往好的方向去發展,總是認為壞的情況發生機率特别小,可以無所顧忌的做任何事情;

對于悲觀派系而言,它們總會認為發展事态如果不及時控制,以後就無法挽回,即時此種局面不會發生的情況下。

上述兩大派系映射到并發程式設計中就如同加鎖與無鎖政策,即加鎖是一種悲觀政策,無鎖是一種樂觀政策,因為對于加鎖的并發程式來說,它們總是認為每次通路共享資源時總會發生沖突,是以必須對每一次資料操作實施加鎖政策。而無鎖則總是假設對共享資源的通路沒有沖突,線程可以不停執行,無需加鎖,無需等待,一旦發現沖突,無鎖政策則采用一種稱為CAS的技術來保證線程執行的安全性,這項CAS技術就是無鎖政策實作的關鍵。

什麼是CAS?

CAS全稱為Compare And Swap即比較并交換,其算法公式如下:

函數公式:CAS(V,E,N)V:表示要更新的變量E:表示預期值N:表示新值

07Java多線程-29. CAS算法