鍍金池/ 教程/ C/ 關(guān)于這本書
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 對(duì)于設(shè)計(jì)無(wú)鎖數(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章 多線程程序的測(cè)試和調(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ā)庫(kù)的簡(jiǎn)單比較
5.3 同步操作和強(qiáng)制排序
A.8 線程本地變量
第8章 并發(fā)代碼設(shè)計(jì)
3.3 保護(hù)共享數(shù)據(jù)的替代設(shè)施
附錄D C++線程庫(kù)參考
第7章 無(wú)鎖并發(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 對(duì)<code>C++</code>11語(yǔ)言特性的簡(jiǎn)要介紹
第6章 基于鎖的并發(fā)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
封面圖片介紹
7.2 無(wú)鎖數(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ù)帶來(lái)的問題
資源
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 使用同步操作簡(jiǎn)化代碼
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ù)

關(guān)于這本書

本書是并發(fā)和多線程機(jī)制指導(dǎo)書籍(基于C++11標(biāo)準(zhǔn))。從最基本的std::thread std::mutexstd::async的使用,到復(fù)雜的原子操作和內(nèi)存模型。

路線圖

前4章,介紹了標(biāo)準(zhǔn)庫(kù)提供的各種庫(kù)工具,展示了使用方法。

第5章,涵蓋了底層內(nèi)存模型和原子操作的實(shí)際情況,包括原子操作如何對(duì)執(zhí)行順序進(jìn)行限制(這章標(biāo)志著介紹部分的結(jié)束)。

第6、7章,開始討論高級(jí)主題,如何使用基本工具去構(gòu)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)——第6章是基于鎖的數(shù)據(jù)結(jié)構(gòu),第7章是無(wú)鎖數(shù)據(jù)結(jié)構(gòu)。

第8章,對(duì)設(shè)計(jì)多線程代碼給了一些指導(dǎo)意見,覆蓋了性能問題和并行算法。

第9章,線程管理——線程池,工作隊(duì)列和中斷操作。

第10章,測(cè)試和調(diào)試——Bug類型,定位Bug的技巧,以及如何進(jìn)行測(cè)試等等。

附錄,包括新的語(yǔ)言特性的簡(jiǎn)要描述,主要是與多線程相關(guān)的特性,以及在第4章中提到的消息傳遞庫(kù)的實(shí)現(xiàn)細(xì)節(jié)和C++11線程庫(kù)的完整的參考。

誰(shuí)應(yīng)該讀這本書

如果你正在用C++寫一個(gè)多線程程序,你應(yīng)該閱讀本書。如果你正在使用C++標(biāo)準(zhǔn)庫(kù)中新的多線程工具,你可以從本書中得到一些指導(dǎo)意見。如果你正在使用其他線程庫(kù),后面章節(jié)里的建議和技術(shù)指導(dǎo)也很值得一看。

閱讀本書需要你有較好的C++基礎(chǔ);雖然,關(guān)于多線程編程的知識(shí)或者經(jīng)驗(yàn)不是必須的,不過這些經(jīng)驗(yàn)可能有用。

如何使用這本書

如果從來(lái)沒有寫過多線程代碼,我建議你從頭到尾閱讀本書;不過,可以跳過第5章中的較為細(xì)節(jié)的部分。第7章內(nèi)容依賴于第5章中的內(nèi)容,因此,如果跳過了第5章,應(yīng)該保證在讀第7章時(shí),已經(jīng)讀過第5章。

如果沒有用過C++11的工具,為了跟上這本書的進(jìn)度,可以先閱讀一下附錄。新工具的使用在文本中已經(jīng)標(biāo)注出來(lái),不過,當(dāng)遇到一些沒見過的工具時(shí),可以隨時(shí)回看附錄。

即使有不同環(huán)境下寫多線程代碼的經(jīng)驗(yàn),開始的章節(jié)仍有必要瀏覽一下,這樣就能清楚地知道,你所熟知的工具在新的C++標(biāo)準(zhǔn)中對(duì)應(yīng)了哪些工具。如果使用原子變量去做一些底層工作,第5章必須閱讀。第8章,有關(guān)C++多線程的異常和安全性的內(nèi)容很值得一看。如果你對(duì)某些關(guān)鍵詞比較感興趣,索引和目錄能夠幫你快速找到相關(guān)的內(nèi)容。

你可能喜歡回顧主要的章節(jié),并用自己的方式閱讀示例代碼。雖然你已經(jīng)了解C++線程庫(kù),但附錄D還是很有用。例如,查找每個(gè)類和函數(shù)的細(xì)節(jié)。

代碼公約和下載

為了區(qū)分普通文本,清單和正文中的中的所有代碼都采用像這樣的固定寬度的字體。許多清單都伴隨著代碼注釋,突出顯示重要的概念。在某些情況下,你可以通過頁(yè)下給出的快捷鏈接進(jìn)行查閱。

本書所有實(shí)例的源代碼,可在出版商的網(wǎng)站上進(jìn)行下載:www.manning.com/cplusplusconcurrencyinaction。

軟件需求

使用書中的代碼,可能需要一個(gè)較新的C++編譯器(要支持C++11語(yǔ)言的特性(見附錄A)),還需要C++支持標(biāo)準(zhǔn)線程庫(kù)。

寫本書的時(shí)候,g++是唯一實(shí)現(xiàn)標(biāo)準(zhǔn)線程庫(kù)的編譯器(盡管Microsoft Visual Studio 2011 preview中也有實(shí)現(xiàn))。g++4.3發(fā)布時(shí)添加了線程庫(kù),并且在隨后的發(fā)布版本中進(jìn)行擴(kuò)展。g++4.3也支持部分C++11語(yǔ)言特性,更多特性的支持在后續(xù)發(fā)布版本中也有添加。更多細(xì)節(jié)請(qǐng)參考g++ C++11的狀態(tài)頁(yè)面[1]。

Microsoft Visual Studio 2010支持部分C++11特性,例如:右值引用和lambda函數(shù),但是沒有實(shí)現(xiàn)線程庫(kù)。

我的公司Software Solutions Ltd,銷售C++11標(biāo)準(zhǔn)線程庫(kù)的完整實(shí)現(xiàn),其可以使用在Microsoft Visual Studio 2005, Microsoft Visual Studio 2008, Microsoft Visual Studio 2010,以及各種g++版本上[2]。這個(gè)線程庫(kù)也可以用來(lái)測(cè)試本書中的例子。

Boost線程庫(kù)[3]提供的API,以及可移植到多個(gè)平臺(tái)。本書中的大多數(shù)例子將std::替換為boost::,再#include引用適當(dāng)?shù)念^文件,就能使用Boost線程庫(kù)來(lái)運(yùn)行。還有部分工具還不支持(例如std::async)或在Boost線程庫(kù)中有著不同名字(例如:boost::unique_future)。

作者在線

購(gòu)買C++ Concurrency in Action就能訪問曼寧(Manning Publications)的私人網(wǎng)絡(luò)論壇,在那里可以對(duì)本書做一些評(píng)論,問一些技術(shù)問題,獲得作者或其他讀者的幫助。為了能夠訪問論壇和訂閱它的內(nèi)容,在瀏覽器地址中輸入www.manning.com/CPlusPlusConcurrencyinAction后,頁(yè)面將告訴你如何注冊(cè)之后訪問論壇,你能獲得什么樣的幫助,還有論壇中的一些規(guī)則。

曼寧保證為本書的讀者提供互相交流,以及和作者交流的場(chǎng)所。雖然曼寧自愿維護(hù)本書的論壇,但不保證這樣的場(chǎng)所不會(huì)收取任何的費(fèi)用。所以,建議你可以嘗試提一些有挑戰(zhàn)性的問題給作者,免得這樣的地方白白浪費(fèi)。

在本書印刷時(shí),就可以通過Internet訪問作者的在線論壇和之前討論的文字記錄。


【1】GNU Compiler Collection C++0x/C++11 status page, http://gcc.gnu.org/projects/cxx0x.html.

【2】The just::thread implementation of the C++ Standard Thread Library, http://www.stdthread.co.uk.

【3】The Boost C++ library collection, http://www.boost.org.