成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

  • 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

volatile、atomic與中斷

2021/01/12
227
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

總結(jié):volatile 是強制 CPU 從內(nèi)存而不是 cache/ 寄存器讀取數(shù)據(jù),與多線程無關(guān),任何多線程資源競爭都需要使用 std::atomic 解決。下面詳細(xì)分析。

volatile 有兩個作用:

1、防止編譯器 O2 級別優(yōu)化。編譯器判斷你的變量在某一段代碼內(nèi)沒有變化或者規(guī)律性變化,就會使用常數(shù)優(yōu)化,如:

            

         

for 循環(huán)可能被優(yōu)化成 a+= 1000,那么可能就不符合程序設(shè)計的預(yù)期。

2、變量在中斷、其它線程(線程跑在多核上,這樣 cache 內(nèi)容就可能不一致)、并行設(shè)備的寄存器等場景下需要穩(wěn)定訪問。中斷服務(wù)程序中修改某個變量,參考上面的代碼,for 循環(huán)被中斷打斷并在中斷程序力里修改了變量 a 的值,編譯器是不知道的。在 c++11 之前,volatile 可以配合 barrier 內(nèi)存屏障保障變量的有序訪問,現(xiàn)在只需要使用 atomic 就行。

volatile 變量是可以被 const 修飾的,比如只讀的狀態(tài)寄存器,它是 volatile 因為它可能被意想不到地改變。它是 const 因為程序不應(yīng)該試圖去修改它。另外 volatile 也可以修飾指針。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄
佛教| 八宿县| 南江县| 炉霍县| 龙陵县| 临泉县| 克什克腾旗| 兴山县| 清涧县| 黔西县| 新巴尔虎右旗| 拜城县| 凤翔县| 曲靖市| 耒阳市| 灌南县| 莱西市| 彭水| 宁化县| 左贡县| 鹤岗市| 横峰县| 汉沽区| 武功县| 梨树县| 正阳县| 闵行区| 全南县| 永清县| 延川县| 四子王旗| 道真| 屏东市| 郸城县| 九寨沟县| 渝北区| 凤阳县| 铜鼓县| 大洼县| 比如县| 佛冈县|