天天看點

簡單了解CAS以及compareAndSet

CAS:Compare and Swap, 比較并交換。

CAS的作用是将指定記憶體位址的内容與所給的某個值相比,如果相等,則将其内容替換為指令中提供的新值,如果不相等,則更新失敗。這一比較并交換的操作是原子的,不可以被中斷。CAS是通過硬體指令保證了原子性,且硬體級别的原子性比進階語言的軟體級别的運作速度要快地多。雖然CAS也包含了多個操作,但其的運算是固定的(就是個比較),這樣的鎖定性能開銷很小。

CAS有3個操作數,記憶體值V,舊的預期值A,要修改的新值B。當且僅當預期值A和記憶體值V相同時,将記憶體值V修改為B,否則什麼都不做。

CAS有效地說明了“我認為位置V應該包含值A;如果包含該值,則将B放到這個位置;否則,不要更改該位置,隻告訴我這個位置現在的值即可。

AtomicInteger類compareAndSet通過原子操作實作了CAS操作,最底層基于彙編語言實作。

public final boolean compareAndSet(V expect, V update)

工作原理如圖:

記憶體值跟期望值相同時,

記憶體值跟期望值不同時,

繼續閱讀