1. 程式人生 > >CAS機制是什麼?有什麼缺點,會出現什麼問題

CAS機制是什麼?有什麼缺點,會出現什麼問題

CAS是英文單詞Compare And Swap的縮寫,翻譯過來就是比較並替換。

CAS機制當中使用了3個基本運算元:記憶體地址V,舊的預期值A,要修改的新值B。

CAS的缺點:

1.CPU開銷較大

在併發量比較高的情況下,如果許多執行緒反覆嘗試更新某一個變數,卻又一直更新不成功,迴圈往復,會給CPU帶來很大的壓力。

2.不能保證程式碼塊的原子性

CAS機制所保證的只是一個變數的原子性操作,而不能保證整個程式碼塊的原子性。比如需要保證3個變數共同進行原子性的更新,就不得不使用Synchronized了。

3.ABA問題

這是CAS機制最大的問題所在。

什麼是ABA問題?

引用原書的話:如果在演算法中的節點可以被迴圈使用,那麼在使用“比較並交換”指令就可能出現這種問題,在CAS操作中將判斷“V的值是否仍然為A?”,並且如果是的話就繼續執行更新操作,在某些演算法中,如果V的值首先由A變為B,再由B變為A,那麼CAS將會操作成功。

怎麼避免ABA問題?

Java中提供了AtomicStampedReference和AtomicMarkableReference來解決ABA問題。