鍍金池/ 教程/ C/ 第3章 線程間共享數(shù)據(jù)
3.4 本章總結(jié)
6.3 基于鎖設計更加復雜的數(shù)據(jù)結(jié)構(gòu)
6.1 為并發(fā)設計的意義何在?
5.2 <code>C++</code>中的原子操作和原子類型
A.7 自動推導變量類型
2.1 線程管理的基礎
8.5 在實踐中設計并發(fā)代碼
2.4 運行時決定線程數(shù)量
2.2 向線程函數(shù)傳遞參數(shù)
第4章 同步并發(fā)操作
2.3 轉(zhuǎn)移線程所有權(quán)
8.3 為多線程性能設計數(shù)據(jù)結(jié)構(gòu)
6.4 本章總結(jié)
7.3 對于設計無鎖數(shù)據(jù)結(jié)構(gòu)的指導建議
關(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章 高級線程管理
5.1 內(nèi)存模型基礎
2.5 識別線程
第1章 你好,C++的并發(fā)世界!
1.2 為什么使用并發(fā)?
A.5 Lambda函數(shù)
第2章 線程管理
4.3 限定等待時間
D.3 &lt;atomic&gt;頭文件
10.2 定位并發(fā)錯誤的技術(shù)
附錄B 并發(fā)庫的簡單比較
5.3 同步操作和強制排序
A.8 線程本地變量
第8章 并發(fā)代碼設計
3.3 保護共享數(shù)據(jù)的替代設施
附錄D C++線程庫參考
第7章 無鎖并發(fā)數(shù)據(jù)結(jié)構(gòu)設計
D.7 &lt;thread&gt;頭文件
D.1 &lt;chrono&gt;頭文件
4.1 等待一個事件或其他條件
A.3 默認函數(shù)
附錄A 對<code>C++</code>11語言特性的簡要介紹
第6章 基于鎖的并發(fā)數(shù)據(jù)結(jié)構(gòu)設計
封面圖片介紹
7.2 無鎖數(shù)據(jù)結(jié)構(gòu)的例子
8.6 本章總結(jié)
8.1 線程間劃分工作的技術(shù)
4.2 使用期望等待一次性事件
8.4 設計并發(fā)代碼的注意事項
D.5 &lt;mutex&gt;頭文件
3.1 共享數(shù)據(jù)帶來的問題
資源
9.3 本章總結(jié)
10.3 本章總結(jié)
10.1 與并發(fā)相關(guān)的錯誤類型
D.4 &lt;future&gt;頭文件
3.2 使用互斥量保護共享數(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 常量表達式函數(shù)
7.4 本章總結(jié)
1.5 本章總結(jié)
第3章 線程間共享數(shù)據(jù)

第3章 線程間共享數(shù)據(jù)

本章主要內(nèi)容

  • 共享數(shù)據(jù)帶來的問題
  • 使用互斥量保護數(shù)據(jù)
  • 數(shù)據(jù)保護的替代方案

上一章中,我們已經(jīng)對線程管理有所了解了,現(xiàn)在讓我們來看一下“共享數(shù)據(jù)的那些事”。

想象一下,你和你的朋友合租一個公寓,公寓中只有一個廚房和一個衛(wèi)生間。當你的朋友在衛(wèi)生間時,你就會不能使用了(除非你們特別好,好到可以在同時使用一個房間)。這個問題也會出現(xiàn)在廚房,假如:廚房里有一個組合式烤箱,當在烤香腸的時候,也在做蛋糕,就可能得到我們不想要的食物(香腸味的蛋糕)。此外,在公共空間將一件事做到一半時,發(fā)現(xiàn)某些需要的東西被別人借走,或是當離開的一段時間內(nèi)有些東西被變動了地方,這都會令我們不爽。

同樣的問題,也困擾著線程。當線程在訪問共享數(shù)據(jù)的時候,必須定一些規(guī)矩,用來限定線程可訪問的數(shù)據(jù)位。還有,一個線程更新了共享數(shù)據(jù),需要對其他線程進行通知。從易用性的角度,同一進程中的多個線程進行數(shù)據(jù)共享,有利有弊。錯誤的共享數(shù)據(jù)使用是產(chǎn)生并發(fā)bug的一個主要原因,并且后果要比香腸味的蛋糕更加嚴重。

本章就以在C++中進行安全的數(shù)據(jù)共享為主題。避免上述及其他潛在問題的發(fā)生的同時,將共享數(shù)據(jù)的優(yōu)勢發(fā)揮到最大。