真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

一文帶你讀懂C++memory_order-創(chuàng)新互聯(lián)

一文帶你讀懂C++memory_order?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)順平,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

看了c++并發(fā)編程實戰(zhàn)的內(nèi)存模型部分后,一直對memory_order不太懂,今天在知乎發(fā)現(xiàn)了百度的brpc,恰好有關(guān)于原子操作的文檔,感覺解釋的很好。為了加深理解,再次總結(jié)一遍。

在多核編程中,我們使用鎖來避免多個線程修改同一個數(shù)據(jù)時產(chǎn)生的競爭條件。但是,鎖會消耗系統(tǒng)資源,當(dāng)鎖成為性能瓶頸的時候,就需要使用另一種方法——原子指令。c++11中引入了原子類型atomic。

原子指令 (x均為std::atomic)作用x.load()返回x的值。x.store(n)把x設(shè)為n,什么都不返回。x.exchange(n)把x設(shè)為n,返回設(shè)定之前的值。x.compare_exchange_strong(expected_ref, desired)若x等于expected_ref,則設(shè)為desired,返回成功;否則把最新值寫入expected_ref,返回失敗。x.compare_exchange_weak(expected_ref, desired)相比compare_exchange_strong可能有spurious wakeup。x.fetch_add(n), x.fetch_sub(n)原子地做x += n, x-= n,返回修改之前的值。

但僅靠原子指令實現(xiàn)不了對資源的訪問控制。這造成的原因是編譯器和cpu實施了重排指令,導(dǎo)致讀寫順序會發(fā)生變化,只要不存在依賴,代碼中后面的指令可能會被放在前面,從而先執(zhí)行它。cpu這么做是為了盡量塞滿每個時鐘周期,在單位時間內(nèi)盡量執(zhí)行更多的指令,從而提高吞吐率。

下面看個例子:

// thread 1
// ready was initialized to false
p.init();
ready = true;

本文標(biāo)題:一文帶你讀懂C++memory_order-創(chuàng)新互聯(lián)
分享鏈接:http://weahome.cn/article/codjop.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部