CAS和ABA

CAS:對(duì)于內(nèi)存中的某一個(gè)值V成玫,提供一個(gè)舊值A(chǔ)和一個(gè)新值B憋肖。如果提供的舊值V和A相等就把B寫入V萌衬。這個(gè)過(guò)程是原子性的。

CAS執(zhí)行結(jié)果要么成功要么失敗毕源,對(duì)于失敗的情形下一般采用不斷重試浪漠。或者放棄霎褐。

ABA:如果另一個(gè)線程修改V值假設(shè)原來(lái)是A址愿,先修改成B,再修改回成A冻璃。當(dāng)前線程的CAS操作無(wú)法分辨當(dāng)前V值是否發(fā)生過(guò)變化响谓。

關(guān)于ABA問(wèn)題我想了一個(gè)例子:在你非常渴的情況下你發(fā)現(xiàn)一個(gè)盛滿水的杯子俱饿,你一飲而盡歌粥。之后再給杯子里重新倒?jié)M水。然后你離開(kāi)拍埠,當(dāng)杯子的真正主人回來(lái)時(shí)看到杯子還是盛滿水,他當(dāng)然不知道是否被人喝完重新倒?jié)M土居。

解決這個(gè)問(wèn)題的方案的一個(gè)策略是每一次倒水假設(shè)有一個(gè)自動(dòng)記錄儀記錄下枣购,這樣主人回來(lái)就可以分辨在她離開(kāi)后是否發(fā)生過(guò)重新倒?jié)M的情況嬉探。這也是解決ABA問(wèn)題目前采用的策略。

ABA問(wèn)題是指在CAS操作中帶來(lái)的潛在問(wèn)題棉圈。

CAS意思是 compare and swap 或者 compare and set, 對(duì)于一個(gè)要更新的變量A涩堤,我們提供一個(gè)它的舊值a 和新值 b,如果變量A的值等于舊值 那么更新成功分瘾,否則失敗胎围。

如果CAS操作是基于CPU內(nèi)核的原子操作,那基本是不會(huì)出現(xiàn)ABA問(wèn)題的德召,但是如果CAS本身操作不滿足原子性白魂,則會(huì)帶來(lái)ABA問(wèn)題,

比如兩個(gè)線程

線程1 查詢A的值為a上岗,與舊值a比較福荸,

線程2 查詢A的值為a,與舊值a比較肴掷,相等敬锐,更新為b值

線程2 查詢A的值為b,與舊值b比較呆瞻,相等台夺,更新為a值

線程1 相等,更新B的值為c

可以看到這樣的情況下痴脾,線程1 可以正常 進(jìn)行CAS操作颤介,將值從a變?yōu)閏 但是在這之間,實(shí)際A值已經(jīng)發(fā)了a->b? b->a的轉(zhuǎn)換明郭。

仔細(xì)思考买窟,這樣可能帶來(lái)的問(wèn)題是,如果需要關(guān)注A值變化過(guò)程薯定,是會(huì)漏掉一段時(shí)間窗口的監(jiān)控

今天偶然看到一個(gè)ABA問(wèn)題可能帶來(lái)的問(wèn)題

小明在提款機(jī)始绍,提取了50元,因?yàn)樘峥顧C(jī)問(wèn)題话侄,有兩個(gè)線程亏推,同時(shí)把余額從100變?yōu)?0

線程1(提款機(jī)):獲取當(dāng)前值100,期望更新為50年堆,

線程2(提款機(jī)):獲取當(dāng)前值100吞杭,期望更新為50,

線程1成功執(zhí)行变丧,線程2某種原因block了芽狗,這時(shí),某人給小明匯款50

線程3(默認(rèn)):獲取當(dāng)前值50痒蓬,期望更新為100童擎,

這時(shí)候線程3成功執(zhí)行滴劲,余額變?yōu)?00,

線程2從Block中恢復(fù)顾复,獲取到的也是100班挖,compare之后,繼續(xù)更新余額為50P驹摇O糗健!

此時(shí)可以看到假丧,實(shí)際余額應(yīng)該為100(100-50+50)双揪,但是實(shí)際上變?yōu)榱?0(100-50+50-50)這就是ABA問(wèn)題帶來(lái)的成功提交

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虎谢,隨后出現(xiàn)的幾起案子盟榴,更是在濱河造成了極大的恐慌,老刑警劉巖婴噩,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擎场,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡几莽,警方通過(guò)查閱死者的電腦和手機(jī)迅办,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)章蚣,“玉大人站欺,你說(shuō)我怎么就攤上這事∠舜梗” “怎么了矾策?”我有些...
    開(kāi)封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)峭沦。 經(jīng)常有香客問(wèn)我贾虽,道長(zhǎng),這世上最難降的妖魔是什么吼鱼? 我笑而不...
    開(kāi)封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任蓬豁,我火速辦了婚禮,結(jié)果婚禮上菇肃,老公的妹妹穿的比我還像新娘地粪。我一直安慰自己,他們只是感情好琐谤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布蟆技。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪付魔。 梳的紋絲不亂的頭發(fā)上聊品,一...
    開(kāi)封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天飞蹂,我揣著相機(jī)與錄音几苍,去河邊找鬼。 笑死陈哑,一個(gè)胖子當(dāng)著我的面吹牛妻坝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惊窖,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼刽宪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了界酒?” 一聲冷哼從身側(cè)響起圣拄,我...
    開(kāi)封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毁欣,沒(méi)想到半個(gè)月后庇谆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凭疮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年饭耳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片执解。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寞肖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衰腌,到底是詐尸還是另有隱情新蟆,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布右蕊,位于F島的核電站琼稻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尤泽。R本人自食惡果不足惜欣簇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坯约。 院中可真熱鬧熊咽,春花似錦、人聲如沸闹丐。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至衫仑,卻和暖如春梨与,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背文狱。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工粥鞋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞄崇。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓呻粹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親苏研。 傳聞我的和親對(duì)象是個(gè)殘疾皇子等浊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 一、多線程 說(shuō)明下線程的狀態(tài) java中的線程一共有 5 種狀態(tài)摹蘑。 NEW:這種情況指的是筹燕,通過(guò) New 關(guān)鍵字創(chuàng)...
    Java旅行者閱讀 4,667評(píng)論 0 44
  • Java8張圖 11、字符串不變性 12衅鹿、equals()方法撒踪、hashCode()方法的區(qū)別 13、...
    Miley_MOJIE閱讀 3,697評(píng)論 0 11
  • 萬(wàn)家燈火時(shí)分 正值新春佳節(jié) 多數(shù)人已奔回家中 吃著熱乎乎的飯菜 推杯換盞同歡慶 互說(shuō)著喜見(jiàn)樂(lè)聞 談笑聲里溫馨融融 ...
    一樹(shù)丁香閱讀 405評(píng)論 7 42
  • 記得看過(guò)這樣一句話:我們用兩年的時(shí)間學(xué)會(huì)了說(shuō)話忍捡,但卻要用了一輩子的時(shí)間學(xué)習(xí)閉嘴。 說(shuō)話其實(shí)一門藝術(shù)切黔,要研究懂這門藝...
    陽(yáng)光下的屁屁熊閱讀 409評(píng)論 1 0
  • 1978年8月23日砸脊,一個(gè)很普通的日子,在費(fèi)城的一間醫(yī)院里纬霞,喬-布萊恩特正焦急的等待著他的第一個(gè)兒子出生凌埂,也...
    風(fēng)流三土閱讀 528評(píng)論 0 1