ABA 問題

黄橙發表於2024-03-22

ABA 問題描述:

  • 假設有兩個執行緒,執行緒 1 和執行緒 2,執行緒 1 工作時間需要 10 秒,執行緒 2 工作需要 2 秒;
  • 主記憶體值為 A,第一輪執行緒 1 和執行緒 2 都把 A 拿到自己的工作記憶體;
  • 第 2 秒,執行緒 2 開始執行,執行緒 2 工作完成把 A 改成了 B ;
  • 第 4 秒,執行緒 2 把 B 又改成了 A,然後就執行緒 2 進入休眠狀態;
  • 第 10 秒,執行緒 1 工作完成,看到期望為 A 真實值也是 A 認為沒有人動過,其實 A 已經經過了修改,只不過又改了回去,然後執行緒 1 進行 CAS 操作。

ABA 問題解決:為了解決這個問題,在每次進行操作的時候加上一個版本號或者是時間戳即可。