memory order 內(nèi)存模型向胡,reorder,memory_order_acquire - C++知識總結(jié)二

三種內(nèi)存模型

這篇文章講的很好
https://www.codedump.info/post/20191214-cxx11-memory-model-2/

三種內(nèi)存模型(https://www.codedump.info/post/20191214-cxx11-memory-model-2/):

  • Sequential Consistency 順序一致性惊完,簡稱SC
  • Total Store Ordering, 全存儲排序僵芹,簡稱TSO
  • Relaxed memory models,松弛型內(nèi)存模型

四種讀寫關(guān)系

Sequential Consistency

memory_order_seq_cst小槐,即順序一致性模型拇派。

Acquire-Release 模式

memory_order_release前面不會被reord到本句之后;memory_order_acquire之后的代碼不會被reorder到本句之前凿跳;memory_order_acq_rel同時包含acquire和release標(biāo)志件豌。

這是一段實踐代碼,代碼簡單明確:https://www.cnblogs.com/lizhanzhe/p/10893016.html

#include <thread>
#include <chrono>
#include <mutex>
#include <thread>
#include <assert.h>
#include <atomic>

std::atomic<int> a=0, b=0, c = 0;

void t1_fun() {
    a = 1;
    b.store(2, std::memory_order_relaxed); //relaxed控嗜,松散的
    
    //memory_order_release茧彤,類似于mutex的unlock,自身線程中它之前的讀寫語句都會執(zhí)行完疆栏,不會被優(yōu)化到本句之后
    c.store(3, std::memory_order_release);
    
}
void t2_fun() {
    //memory_order_acquire曾掂, 類似于mutex的lock惫谤,自身線程它后面的讀寫語句一定是在后面執(zhí)行的,不會被優(yōu)化到本句之前
    while (c.load(std::memory_order_acquire) != 3); // 以下 assert 永遠(yuǎn)不會失敗 
    assert(a == 1 && b == 2);
    assert(b.load(std::memory_order_relaxed) == 2);
}
int main() {
    std::thread t1(t1_fun);
    std::thread t2(t2_fun);
    t1.join();
    t2.join();
}

Release-Consume 模式

memory_order_consume遭殉,只約束mutex對象的memory order石挂,不約束上下文中其他變量

a = 0;
c = 0;
thread 1:{
    a = 1; 
    c.store(3, memory_order_release);
}
thread 2:{ 
    //consume只約束mutex對象的memory order博助,不約束上下文中其他變量
    while (c.load(memory_order_consume) != 3) ; 
    assert(a == 1); // assert 可能失敗也可能不失敗
}

Relaxed模式

松散的险污,不約束。線程內(nèi)部可以reorder富岳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛔糯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子窖式,更是在濱河造成了極大的恐慌蚁飒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝喘,死亡現(xiàn)場離奇詭異淮逻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)阁簸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門爬早,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人启妹,你說我怎么就攤上這事筛严。” “怎么了饶米?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵桨啃,是天一觀的道長。 經(jīng)常有香客問我檬输,道長照瘾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任丧慈,我火速辦了婚禮析命,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伊滋。我一直安慰自己碳却,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布笑旺。 她就那樣靜靜地躺著昼浦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筒主。 梳的紋絲不亂的頭發(fā)上关噪,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天鸟蟹,我揣著相機(jī)與錄音,去河邊找鬼使兔。 笑死建钥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虐沥。 我是一名探鬼主播熊经,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼欲险!你這毒婦竟也來了镐依?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤天试,失蹤者是張志新(化名)和其女友劉穎槐壳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喜每,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡务唐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了带兜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枫笛。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鞋真,靈堂內(nèi)的尸體忽然破棺而出崇堰,到底是詐尸還是另有隱情,我是刑警寧澤涩咖,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布海诲,位于F島的核電站,受9級特大地震影響檩互,放射性物質(zhì)發(fā)生泄漏特幔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一闸昨、第九天 我趴在偏房一處隱蔽的房頂上張望蚯斯。 院中可真熱鬧,春花似錦饵较、人聲如沸拍嵌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽横辆。三九已至,卻和暖如春茄猫,著一層夾襖步出監(jiān)牢的瞬間狈蚤,已是汗流浹背困肩。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留脆侮,地道東北人锌畸。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像靖避,于是被迫代替她去往敵國和親潭枣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348