轉 https://blog.csdn.net/linuxheik/article/details/76005374
ABA問題
在多線程環境中,使用lock-free的CAS時,如果一個線程對變量修改2次,第2次修改後的值和第1次修改前的值相同,那麼可能就會出現ABA問題。以上面的例子爲例:
假設有兩個線程P1和P2,P1執行完int oldval=val
後被其他線程搶佔。P2線程在此期間修改了val的值(可能多次修改),但最終val的值和修改前一樣。當P1線程之後運行CAS函數時,並不能發現這個問題。這就是ABA問題。
解決方法
一個常用的方法是添加額外的“tag”或“stamp”位來標記是指針是否被修改過。