cas優點:如一描述在並發量不是很高時cas機制會提高效率。
cas缺點:
1、cpu開銷大,在高並發下,許多線程,更新一變量,多次更新不成功,循環反復,給cpu帶來大量壓力。
2、只是一個變量的原子性操作,不能保證代碼塊的原子性。
3、ABA問題
ABA問題:內存值V=100;
threadA 將100,改為50;
threadB 將100,改為50;
threadC 將50,改為100;
場景:小牛取款,由於機器不太好使,多點了幾次全款操作。后台threadA和threadB工作,
此時threadA操作成功(100->50),threadB阻塞。正好牛媽打款50元給小牛(50->100),
threadC執行成功,之后threadB運行了,又改為(100->50)。
牛氣沖天,lz錢哪去了???
如何解決aba問題:
對內存中的值加個版本號,在比較的時候除了比較值還的比較版本號。
java:AtomicStampedReference就是用版本號實現cas機制。
