無鎖編程:lock-free原理;CAS;ABA問題

轉 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”位來標記是指針是否被修改過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章