- C++并發編程實戰(第2版)
- (英)安東尼·威廉姆斯
- 1509字
- 2022-01-04 16:35:38
關于本書
本書是一份深度指南,內容是 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++程序庫。
- ASP.NET Core:Cloud-ready,Enterprise Web Application Development
- Learning LibGDX Game Development(Second Edition)
- 深入理解Django:框架內幕與實現原理
- Vue.js前端開發基礎與項目實戰
- Unity Shader入門精要
- Jenkins Continuous Integration Cookbook(Second Edition)
- Visual C++開發入行真功夫
- 深入分布式緩存:從原理到實踐
- Cocos2d-x by Example:Beginner's Guide(Second Edition)
- OpenCV with Python Blueprints
- Python預測分析實戰
- 計算機組裝與維護(第二版)
- MySQL數據庫教程(視頻指導版)
- Mastering React Test:Driven Development
- TensorFlow 2.0深度學習應用實踐