官术网_书友最值得收藏!

關于本書

本書是一份深度指南,內容是 C++新標準中涉及的并發與多線程功能,從std::thread、std::mutex和std::async的基本使用方法開始,一直到復雜的內存模型和原子操作。

本書的組織結構

第1~4章介紹C++標準程序庫提供的各種工具,并說明如何使用。

第5章剖析C++內存模型和原子操作的底層核心細節,包括如何運用原子操作強制約束其他線程代碼的執行順序,這是本書入門部分的最后一章。

第6章和第7章開始進入高級主題,通過范例解釋如何使用基礎工具構建復雜的數據結構。第6章研究基于鎖的并發數據結構,第7章分析無鎖數據結構。

第8章繼續高級主題,涉及多線程代碼設計的指導原則、影響性能的各種因素,還有并行算法函數的實現范例。

第9章探討高級線程管理,包括線程池、工作隊列和中斷線程。

第10章探討C++17所支持的新引入的并行特性,它們以重載的形式實現了許多標準庫算法函數。

第11章探討測試和除錯,包括錯誤的類型、定位錯誤的技法、如何測試等。

附錄包含以下內容:附錄A簡單介紹新標準引入的與多線程相關的新特性;附錄B是幾個并發程序庫之間的簡要對比;附錄C是消息傳遞程序庫的實現細節,該庫最先在第4章中提及;附錄D是一份完整的C++線程庫參考名錄(作為電子資源配套提供,讀者可從異步社區下載)。

目標讀者

如果你要用C++編寫多線程代碼,就應該閱讀本書;如果你想使用C++標準程序庫中的多線程工具,那么本書可作為基礎指南;如果你要用到其他線程庫,本書后面的章節也給出了指導原則和技巧,仍會讓你獲益。

我假設讀者已具備了良好的C++實操知識,卻不太熟悉C++的新特性。為此,附錄A將補充相關內容。

如何閱讀本書

如果讀者以前沒有編寫過多線程代碼,我建議按順序從頭到尾閱讀本書。

假若讀者之前沒使用過C++11的新功能,那就需要先瀏覽一下附錄A,再開始閱讀正文,這將有助于透徹理解本書的代碼示例。正文中已經標注出用到C++新特性的地方,盡管如此,一旦你遇到任何從未見過的內容,也可以隨時翻查附錄。

如果讀者已經編寫過多線程代碼,并且經驗豐富,前幾章會讓你知曉已經熟知的工具與新標準的C++工具是怎樣對應的。倘若讀者要進行任何底層工作,涉及原子變量,則第5章必不可少。為了確保讀者真正熟知C++多線程編程的各種細節,例如異常安全(exception safety),那么,第8章值得好好學習。如果讀者肩負某種特定的編碼任務,索引和目錄會幫你迅速定位到有關章節。

即便你已經掌握了C++線程庫的使用方法,附錄D(可從異步社區下載)依然有用,例如可供你查閱各個類和函數調用的精準細節。你也可以考慮時不時地回顧一下主要章節,或強化記憶某個特定的模型,或重溫示例代碼。

代碼約定

代碼清單都采用等寬字體(示例:fixed-width font)以區分于普通文本。許多代碼清單都附有代碼注解,標記出重要的概念。在一些代碼清單中,代碼通過有編號的圓形標志與隨后正文的解釋相對應。

軟件要求

為了能夠原封不動地使用本書中的代碼,讀者需要安裝新近發布的C++編譯器,以支持示例中C++11的語言特性(見附錄A),另外還需要C++標準線程庫。

我在編寫本書的時候,g++、Clang++和Visual Studio發布的新版本全都實現了C++標準線程庫的支持。它們同樣支持附錄列出的絕大部分語言特性,而未獲支持的特性也將很快得到支持。

我的公司Just Software Solutions出售C++11標準線程庫的完整實現[1],也出售符合并發技術規約的程序庫實現。前者適用于好幾個相對較舊的編譯器,后者則適用于較新版本的Clang、GCC和Visual Studio,后者也可用于測試本書的代碼。

Boost線程庫[2]提供了一套API,這套API以C++11標準線程庫的提案為依據,可以移植到許多平臺上。本書的絕大多數示例代碼稍作改動就能使用Boost線程庫,這些改動包括將std::with全部替換為boost::and,以及用#include預處理指令包含恰當的頭文件。Boost線程庫內有少部分功能未獲支持(如std::async)或者名字不同(如boost::unique_ future)。


[1] C++11標準線程庫的just::thread實現。

[2] Boost C++程序庫。

主站蜘蛛池模板: 灌阳县| 合江县| 桃源县| 钟山县| 六盘水市| 眉山市| 浏阳市| 镶黄旗| 永兴县| 吴堡县| 连山| 哈尔滨市| 新安县| 个旧市| 于都县| 同仁县| 陵川县| 江都市| 饶平县| 开阳县| 调兵山市| 镇远县| 宜章县| 商丘市| 淄博市| 绍兴市| 南开区| 北川| 南澳县| 罗平县| 成武县| 江都市| 武乡县| 巫溪县| 天门市| 满洲里市| 瓦房店市| 越西县| 周至县| 汕尾市| 新巴尔虎左旗|