前言
每日一題專欄
CAS實現(xiàn)原子操作的三大問題?
ABA問題:
因為CAS需要在操作值的時候,檢查值有沒有發(fā)生變化,如果沒有發(fā)生變化則更新,但是如果一個值原來是A,變成了B,又變成了A,那么使用CAS進行檢查時會發(fā)現(xiàn)它的值沒有發(fā)生變化,但是實際上卻變化了。
循環(huán)時間長開銷大:
自旋CAS如果長時間不成功,會給CPU帶來非常大的執(zhí)行開銷。
只能保證一個共享變量的原子操作:
當對一個共享變量執(zhí)行操作時,我們可以使用循環(huán)CAS的方式來保證原子操作,但是對多個共享變量操作時,循環(huán)CAS就無法保證操作的原子性,這個時候就只能用鎖。