標籤:

CAS和樂觀鎖之間存在什麼聯繫?

我知道CAS就是舊值A和新值B判斷的一個過程,
樂觀鎖是版本號來進行判斷的。
之前看過一篇博客說樂觀鎖是CAS實現的,我一直很疑惑,兩者具體是怎樣聯繫的?


樂觀鎖是一種思想,即認為讀多寫少,遇到並發寫的可能性比較低,所以採取在寫時先讀出當前版本號,然後加鎖操作(比較跟上一次的版本號,如果一樣則更新),如果失敗則要重複讀-比較-寫的操作。
CAS是一種更新的原子操作,比較當前值跟傳入值是否一樣,一樣則更新,否則失敗。
CAS頂多算是樂觀鎖寫那一步操作的一種實現方式罷了,不用CAS自己加鎖也是可以的。


樂觀鎖
悲觀鎖
是一種思想。可以用在很多方面。

比如資料庫方面。
悲觀鎖就是for update
樂觀鎖就是 version欄位

JDK方面:
悲觀鎖就是sync
樂觀鎖就是原子類(內部使用CAS實現)

本質來說,就是悲觀鎖認為總會有人搶我的。
樂觀鎖就認為,基本沒人搶。


有version 才可以解決aba 問題


版本號只是為了解決ABA問題


推薦閱讀:

鎖兩下比鎖一下安全嗎?
球形門鎖從裡邊怎麼開,已經拆到這地步了 下面怎麼辦?
密碼鎖的開鎖原理是什麼?
錫紙開鎖是真的嗎?是鎖具廠商為了推廣鎖具的手段還是真有其事?
保險箱轉圈鎖的原理?

TAG:Java | 鎖具 | CAS |