本書是并發(fā)和多線程機制指導(dǎo)書籍(基于C++11標準)。從最基本的std::thread std::mutex和std::async的使用,到復(fù)雜的原子操作和內(nèi)存模型。
前4章,介紹了標準庫提供的各種庫工具,展示了使用方法。
第5章,涵蓋了底層內(nèi)存模型和原子操作的實際情況,包括原子操作如何對執(zhí)行順序進行限制(這章標志著介紹部分的結(jié)束)。
第6、7章,開始討論高級主題,如何使用基本工具去構(gòu)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)——第6章是基于鎖的數(shù)據(jù)結(jié)構(gòu),第7章是無鎖數(shù)據(jù)結(jié)構(gòu)。
第8章,對設(shè)計多線程代碼給了一些指導(dǎo)意見,覆蓋了性能問題和并行算法。
第9章,線程管理——線程池,工作隊列和中斷操作。
第10章,測試和調(diào)試——Bug類型,定位Bug的技巧,以及如何進行測試等等。
附錄,包括新的語言特性的簡要描述,主要是與多線程相關(guān)的特性,以及在第4章中提到的消息傳遞庫的實現(xiàn)細節(jié)和C++11線程庫的完整的參考。
如果你正在用C++寫一個多線程程序,你應(yīng)該閱讀本書。如果你正在使用C++標準庫中新的多線程工具,你可以從本書中得到一些指導(dǎo)意見。如果你正在使用其他線程庫,后面章節(jié)里的建議和技術(shù)指導(dǎo)也很值得一看。
閱讀本書需要你有較好的C++基礎(chǔ);雖然,關(guān)于多線程編程的知識或者經(jīng)驗不是必須的,不過這些經(jīng)驗可能有用。
如果從來沒有寫過多線程代碼,我建議你從頭到尾閱讀本書;不過,可以跳過第5章中的較為細節(jié)的部分。第7章內(nèi)容依賴于第5章中的內(nèi)容,因此,如果跳過了第5章,應(yīng)該保證在讀第7章時,已經(jīng)讀過第5章。
如果沒有用過C++11的工具,為了跟上這本書的進度,可以先閱讀一下附錄。新工具的使用在文本中已經(jīng)標注出來,不過,當遇到一些沒見過的工具時,可以隨時回看附錄。
即使有不同環(huán)境下寫多線程代碼的經(jīng)驗,開始的章節(jié)仍有必要瀏覽一下,這樣就能清楚地知道,你所熟知的工具在新的C++標準中對應(yīng)了哪些工具。如果使用原子變量去做一些底層工作,第5章必須閱讀。第8章,有關(guān)C++多線程的異常和安全性的內(nèi)容很值得一看。如果你對某些關(guān)鍵詞比較感興趣,索引和目錄能夠幫你快速找到相關(guān)的內(nèi)容。
你可能喜歡回顧主要的章節(jié),并用自己的方式閱讀示例代碼。雖然你已經(jīng)了解C++線程庫,但附錄D還是很有用。例如,查找每個類和函數(shù)的細節(jié)。
為了區(qū)分普通文本,清單和正文中的中的所有代碼都采用像這樣的固定寬度的字體。許多清單都伴隨著代碼注釋,突出顯示重要的概念。在某些情況下,你可以通過頁下給出的快捷鏈接進行查閱。
本書所有實例的源代碼,可在出版商的網(wǎng)站上進行下載:www.manning.com/cplusplusconcurrencyinaction。
使用書中的代碼,可能需要一個較新的C++編譯器(要支持C++11語言的特性(見附錄A)),還需要C++支持標準線程庫。
寫本書的時候,g++是唯一實現(xiàn)標準線程庫的編譯器(盡管Microsoft Visual Studio 2011 preview中也有實現(xiàn))。g++4.3發(fā)布時添加了線程庫,并且在隨后的發(fā)布版本中進行擴展。g++4.3也支持部分C++11語言特性,更多特性的支持在后續(xù)發(fā)布版本中也有添加。更多細節(jié)請參考g++ C++11的狀態(tài)頁面[1]。
Microsoft Visual Studio 2010支持部分C++11特性,例如:右值引用和lambda函數(shù),但是沒有實現(xiàn)線程庫。
我的公司Software Solutions Ltd,銷售C++11標準線程庫的完整實現(xiàn),其可以使用在Microsoft Visual Studio 2005, Microsoft Visual Studio 2008, Microsoft Visual Studio 2010,以及各種g++版本上[2]。這個線程庫也可以用來測試本書中的例子。
Boost線程庫[3]提供的API,以及可移植到多個平臺。本書中的大多數(shù)例子將std::替換為boost::,再#include引用適當?shù)念^文件,就能使用Boost線程庫來運行。還有部分工具還不支持(例如std::async)或在Boost線程庫中有著不同名字(例如:boost::unique_future)。
購買C++ Concurrency in Action就能訪問曼寧(Manning Publications)的私人網(wǎng)絡(luò)論壇,在那里可以對本書做一些評論,問一些技術(shù)問題,獲得作者或其他讀者的幫助。為了能夠訪問論壇和訂閱它的內(nèi)容,在瀏覽器地址中輸入www.manning.com/CPlusPlusConcurrencyinAction后,頁面將告訴你如何注冊之后訪問論壇,你能獲得什么樣的幫助,還有論壇中的一些規(guī)則。
曼寧保證為本書的讀者提供互相交流,以及和作者交流的場所。雖然曼寧自愿維護本書的論壇,但不保證這樣的場所不會收取任何的費用。所以,建議你可以嘗試提一些有挑戰(zhàn)性的問題給作者,免得這樣的地方白白浪費。
在本書印刷時,就可以通過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.