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問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM