鍍金池/ 教程/ C/ 3.4 本章總結(jié)
3.4 本章總結(jié)
6.3 基于鎖設(shè)計更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)
6.1 為并發(fā)設(shè)計的意義何在?
5.2 <code>C++</code>中的原子操作和原子類型
A.7 自動推導(dǎo)變量類型
2.1 線程管理的基礎(chǔ)
8.5 在實踐中設(shè)計并發(fā)代碼
2.4 運行時決定線程數(shù)量
2.2 向線程函數(shù)傳遞參數(shù)
第4章 同步并發(fā)操作
2.3 轉(zhuǎn)移線程所有權(quán)
8.3 為多線程性能設(shè)計數(shù)據(jù)結(jié)構(gòu)
6.4 本章總結(jié)
7.3 對于設(shè)計無鎖數(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章 高級線程管理
5.1 內(nèi)存模型基礎(chǔ)
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 同步操作和強(qiáng)制排序
A.8 線程本地變量
第8章 并發(fā)代碼設(shè)計
3.3 保護(hù)共享數(shù)據(jù)的替代設(shè)施
附錄D C++線程庫參考
第7章 無鎖并發(fā)數(shù)據(jù)結(jié)構(gòu)設(shè)計
D.7 &lt;thread&gt;頭文件
D.1 &lt;chrono&gt;頭文件
4.1 等待一個事件或其他條件
A.3 默認(rèn)函數(shù)
附錄A 對<code>C++</code>11語言特性的簡要介紹
第6章 基于鎖的并發(fā)數(shù)據(jù)結(jié)構(gòu)設(shè)計
封面圖片介紹
7.2 無鎖數(shù)據(jù)結(jié)構(gòu)的例子
8.6 本章總結(jié)
8.1 線程間劃分工作的技術(shù)
4.2 使用期望等待一次性事件
8.4 設(shè)計并發(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 使用互斥量保護(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ù)

3.4 本章總結(jié)

本章討論了當(dāng)兩個線程間的共享數(shù)據(jù)發(fā)生惡性條件競爭會帶來多么嚴(yán)重的災(zāi)難,還討論了如何使用std::mutex,和如何避免這些問題。如你所見,互斥量并不是靈丹妙藥,其還有自己的問題(比如:死鎖),雖然C++標(biāo)準(zhǔn)庫提供了一類工具來避免這些(例如:std::lock())。你還見識了一些用于避免死鎖的先進(jìn)技術(shù),之后了解了鎖所有權(quán)的轉(zhuǎn)移,以及一些圍繞如何選取適當(dāng)粒度鎖產(chǎn)生的問題。最后,討論了在具體情況下,數(shù)據(jù)保護(hù)的替代方案,例如:std::call_once()boost::shared_mutex

還有一個方面沒有涉及到,那就是等待其他線程作為輸入的情況。我們的線程安全棧,僅是在棧為空時,拋出一個異常,所以當(dāng)一個線程要等待其他線程向棧壓入一個值時(這是一個線程安全棧的主要用途之一),它不得不多次嘗試去彈出一個值,當(dāng)捕獲拋出的異常時,再次進(jìn)行嘗試。這種消耗資源的檢查,沒有任何意義。并且,不斷的檢查會影響系統(tǒng)中其他線程的運行,這反而會妨礙程序的進(jìn)展。我們需要一些方法讓一個線程等待其他線程完成任務(wù),但在等待過程中不占用CPU。第4章中,會去建立一些工具,用于保護(hù)共享數(shù)據(jù),還會介紹一些線程同步操作的機(jī)制;第6章中,如何構(gòu)建更大型的可復(fù)用的數(shù)據(jù)類型。