原子操作的實現(xiàn)原理

簡書 占小狼
轉(zhuǎn)載請注明原創(chuàng)出處橡娄,謝謝!

原子(atomic)癣籽,本意是指“不能被進一步分割的粒子”挽唉。原子操作意味著“不可被中斷的一個或一系列操作”。

接下去一起看看在Intel處理器和Java里是如何實現(xiàn)原子操作的筷狼。

術(shù)語定義

  • Cache line(緩存行)
  • Compare and Swap(比較并交換)
  • cpu pipeline(cpu流水線)
  • memory order violation(內(nèi)存順利沖突)

處理器實現(xiàn)原子操作

當處理器讀取內(nèi)存的一個字節(jié)時瓶籽,其它處理器不能訪問這個字節(jié)的內(nèi)存地址,最新的處理器能自動保證處理器對同一緩存行里進行16/32/64位的操作是原子的埂材。處理器提供總線鎖定緩存鎖定的機制保證復(fù)雜內(nèi)存操作的原子性塑顺。

1、總線鎖保證原子性

使用處理器提供的一個LOCK#信號俏险,當一個處理器在總線上輸出此信號時柬批,其它處理器的請求將被阻塞口锭,那么該處理器就能獨自共享內(nèi)存。

2、緩存鎖保證原子性

“緩存鎖定”指內(nèi)存區(qū)域如果被緩存在處理器的緩存行中龄广,并且在Lock操作期間被鎖定炉菲,那么當它執(zhí)行鎖操作回寫到內(nèi)存時疲陕,處理器不需要在總線上聲言LOCK#信號鞠值,而是修改內(nèi)部的內(nèi)存地址墓赴,通過緩存一致性機制保證操作的原子性。
例外:當操作的數(shù)據(jù)不能被緩存在處理器內(nèi)部航瞭,或操作的數(shù)據(jù)跨多個緩存行诫硕,處理器會調(diào)用總線鎖定。

緩存一致性

緩存一致性會阻止同時修改由兩個以上處理器的內(nèi)存區(qū)域數(shù)據(jù)刊侯,當其他處理器回寫被鎖定的緩存行數(shù)據(jù)時痘括,會使其它處理器的緩存行無效。

Java原子操作實現(xiàn)

在Java中通過鎖和循環(huán)CAS的方式實現(xiàn)原子操作滔吠。

CAS

jvm中的CAS操作是基于處理器的CMPXCHG指令實現(xiàn)的,CAS存在三個問題:

  • ABA問題
  • 循環(huán)時間長開銷大
  • 只能保證一個共享變量的原子操作

鎖機制保證了只有獲得鎖的線程才能操作鎖定的內(nèi)存區(qū)域挠日,具體實現(xiàn)可以參考java synchronized

END疮绷。
我是占小狼。
在魔都艱苦奮斗嚣潜,白天是上班族冬骚,晚上是知識服務(wù)工作者。
讀完我的文章有收獲懂算,記得關(guān)注和點贊哦只冻,如果非要打賞,我也是不會拒絕的啦计技!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喜德,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子垮媒,更是在濱河造成了極大的恐慌舍悯,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睡雇,死亡現(xiàn)場離奇詭異萌衬,居然都是意外死亡,警方通過查閱死者的電腦和手機它抱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門秕豫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人观蓄,你說我怎么就攤上這事混移。” “怎么了蜘腌?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵沫屡,是天一觀的道長。 經(jīng)常有香客問我撮珠,道長沮脖,這世上最難降的妖魔是什么金矛? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮勺届,結(jié)果婚禮上驶俊,老公的妹妹穿的比我還像新娘。我一直安慰自己免姿,他們只是感情好饼酿,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胚膊,像睡著了一般故俐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上紊婉,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天药版,我揣著相機與錄音,去河邊找鬼喻犁。 笑死槽片,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的肢础。 我是一名探鬼主播还栓,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼传轰!你這毒婦竟也來了剩盒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤慨蛙,失蹤者是張志新(化名)和其女友劉穎勃刨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體股淡,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡身隐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唯灵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贾铝。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖埠帕,靈堂內(nèi)的尸體忽然破棺而出垢揩,到底是詐尸還是另有隱情,我是刑警寧澤敛瓷,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布叁巨,位于F島的核電站,受9級特大地震影響呐籽,放射性物質(zhì)發(fā)生泄漏锋勺。R本人自食惡果不足惜蚀瘸,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庶橱。 院中可真熱鬧贮勃,春花似錦、人聲如沸苏章。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枫绅。三九已至泉孩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間并淋,已是汗流浹背棵譬。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留预伺,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓曼尊,卻偏偏與公主長得像酬诀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骆撇,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

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