鍍金池/ 教程/ C/ 第5章 C++內(nèi)存模型和原子類型操作
3.4 本章總結(jié)
6.3 基于鎖設(shè)計(jì)更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)
6.1 為并發(fā)設(shè)計(jì)的意義何在?
5.2 <code>C++</code>中的原子操作和原子類型
A.7 自動(dòng)推導(dǎo)變量類型
2.1 線程管理的基礎(chǔ)
8.5 在實(shí)踐中設(shè)計(jì)并發(fā)代碼
2.4 運(yùn)行時(shí)決定線程數(shù)量
2.2 向線程函數(shù)傳遞參數(shù)
第4章 同步并發(fā)操作
2.3 轉(zhuǎn)移線程所有權(quán)
8.3 為多線程性能設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)
6.4 本章總結(jié)
7.3 對于設(shè)計(jì)無鎖數(shù)據(jù)結(jié)構(gòu)的指導(dǎo)建議
關(guān)于這本書
A.1 右值引用
2.6 本章總結(jié)
D.2 &lt;condition_variable&gt;頭文件
A.6 變參模板
6.2 基于鎖的并發(fā)數(shù)據(jù)結(jié)構(gòu)
4.5 本章總結(jié)
A.9 本章總結(jié)
前言
第10章 多線程程序的測試和調(diào)試
5.4 本章總結(jié)
第9章 高級(jí)線程管理
5.1 內(nèi)存模型基礎(chǔ)
2.5 識(shí)別線程
第1章 你好,C++的并發(fā)世界!
1.2 為什么使用并發(fā)?
A.5 Lambda函數(shù)
第2章 線程管理
4.3 限定等待時(shí)間
D.3 &lt;atomic&gt;頭文件
10.2 定位并發(fā)錯(cuò)誤的技術(shù)
附錄B 并發(fā)庫的簡單比較
5.3 同步操作和強(qiáng)制排序
A.8 線程本地變量
第8章 并發(fā)代碼設(shè)計(jì)
3.3 保護(hù)共享數(shù)據(jù)的替代設(shè)施
附錄D C++線程庫參考
第7章 無鎖并發(fā)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
D.7 &lt;thread&gt;頭文件
D.1 &lt;chrono&gt;頭文件
4.1 等待一個(gè)事件或其他條件
A.3 默認(rèn)函數(shù)
附錄A 對<code>C++</code>11語言特性的簡要介紹
第6章 基于鎖的并發(fā)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
封面圖片介紹
7.2 無鎖數(shù)據(jù)結(jié)構(gòu)的例子
8.6 本章總結(jié)
8.1 線程間劃分工作的技術(shù)
4.2 使用期望等待一次性事件
8.4 設(shè)計(jì)并發(fā)代碼的注意事項(xiàng)
D.5 &lt;mutex&gt;頭文件
3.1 共享數(shù)據(jù)帶來的問題
資源
9.3 本章總結(jié)
10.3 本章總結(jié)
10.1 與并發(fā)相關(guān)的錯(cuò)誤類型
D.4 &lt;future&gt;頭文件
3.2 使用互斥量保護(hù)共享數(shù)據(jù)
9.1 線程池
1.1 何謂并發(fā)
9.2 中斷線程
4.4 使用同步操作簡化代碼
A.2 刪除函數(shù)
1.3 C++中的并發(fā)和多線程
1.4 開始入門
第5章 C++內(nèi)存模型和原子類型操作
消息傳遞框架與完整的ATM示例
8.2 影響并發(fā)代碼性能的因素
7.1 定義和意義
D.6 &lt;ratio&gt;頭文件
A.4 常量表達(dá)式函數(shù)
7.4 本章總結(jié)
1.5 本章總結(jié)
第3章 線程間共享數(shù)據(jù)

第5章 C++內(nèi)存模型和原子類型操作

本章主要內(nèi)容

  • C++11內(nèi)存模型詳解
  • 標(biāo)準(zhǔn)庫提供的原子類型
  • 使用各種原子類型
  • 原子操作實(shí)現(xiàn)線程同步功能

C++11標(biāo)準(zhǔn)中,有一個(gè)十分重要特性,常被程序員們所忽略。它不是一個(gè)新語法特性,也不是新工具,它就是多線程(感知)內(nèi)存模型。內(nèi)存模型沒有明確的定義基本部件應(yīng)該如何工作的話,之前介紹的那些工具就無法正常工作。那為什么大多數(shù)程序員都沒有注意到它呢?當(dāng)你使用互斥量保護(hù)你的數(shù)據(jù)和條件變量,或者是“期望”上的信號(hào)事件時(shí),對于互斥量為什么能起到這樣作用,大多數(shù)人不會(huì)去關(guān)心。只有當(dāng)你試圖去“接觸硬件”,你才能詳盡的了解到內(nèi)存模型是如何起作用的。

C++是一個(gè)系統(tǒng)級(jí)別的編程語言,標(biāo)準(zhǔn)委員會(huì)的目標(biāo)之一就是不需要比C++還要底層的高級(jí)語言。C++應(yīng)該向程序員提供足夠的靈活性,無障礙的去做他們想要做的事情;當(dāng)需要的時(shí)候,可以讓他們“接觸硬件”。原子類型和原子操作就允許他們“接觸硬件”,并提供底層級(jí)別的同步操作,通常會(huì)將常規(guī)指令數(shù)縮減到1~2個(gè)CPU指令。

本章,我們將討論內(nèi)存模型的基本知識(shí),而后再了解一下原子類型和操作,最后了解與原子類型操作相關(guān)的各種同步。這個(gè)過程會(huì)比較復(fù)雜:除非你已經(jīng)打算使用原子操作(比如,第7章的無鎖數(shù)據(jù)結(jié)構(gòu))同步你的代碼,否則,就沒有必要了解過多的細(xì)節(jié)。

讓我們先輕松愉快的來看一下有關(guān)內(nèi)存模型的基本知識(shí)。