Java 中 CAS 原理

CAS 有三個操做數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值A和內存值V相等時,將內存值V修改爲B。這是一種樂觀鎖的思路,他相信在它修改以前,沒有其餘線程去修改他。線程

CAS 的缺陷:ABA 問題。CAS 是在更新值時,檢查值有沒有發生變化,若是沒發生變化就執行更新操做。可是若是原來是 A,變成了 B,後來又變成 A,那麼 CAS 是不會知道值已經發生變化了。但實際上卻變化了。ABA 問題的解決思路就是使用版本號。給變量追加版本號,每次變量更新就將版本號 +1.那麼 A-B-A 就會變成 A1-B2-A3內存

相關文章
相關標籤/搜索