本書是并發(fā)和多線程機(jī)制指導(dǎo)書籍(基于C++11標(biāo)準(zhǔn))。從最基本的std::thread std::mutex
和std::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ù)的完整的參考。
如果你正在用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.