关于这本书

本书是并发和多线程机制指导书籍,基于C++最新标准(11,14,17)。从最基本的std::thread std::mutexstd::async的使用,到复杂的原子操作和内存模型。

路线图

前4章,介绍了标准库提供的各种库工具,展示了使用方法。

第5章,涵盖了底层内存模型和原子操作的实际情况,包括原子操作如何对执行顺序进行限制(这章标志着介绍部分的结束)。

第6、7章,开始讨论高级主题,如何使用基本工具去构建复杂的数据结构——第6章是基于锁的数据结构,第7章是无锁数据结构。

第8章,对设计多线程代码给了一些指导意见,覆盖了性能问题和并行算法。

第9章,线程管理——线程池,工作队列和中断操作。

第10章,介绍C++17中标准库算法对并行性的支持。

第11章,测试和调试——Bug类型,定位Bug的技巧,以及如何进行测试等等。

附录,包括新的语言特性的简要描述,主要是与多线程相关的特性,以及在第4章中提到的消息传递库的实现细节和C++17线程库的完整的参考。

谁应该读这本书

如果你正在用C++写一个多线程程序,你应该阅读本书。如果你正在使用C++标准库中新的多线程工具,你可以从本书中得到一些指导意见。如果你正在使用其他线程库,后面章节里的建议和技术指导也很值得一看。

阅读本书需要你有较好的C++基础;虽然,关于多线程编程的知识或者经验不是必须的,不过这些经验可能有用。

如何使用这本书

如果从来没有写过多线程代码,我建议你从头到尾阅读本书;不过,可以跳过第5章中的较为细节的部分。第7章内容依赖于第5章中的内容,因此,如果跳过了第5章,应该保证在读第7章时,已经读过第5章。

如果没有用过C++11的工具,为了跟上这本书的进度,可以先阅读一下附录。新工具的使用在文本中已经标注出来,不过,当遇到一些没见过的工具时,可以随时回看附录。

即使有不同环境下写多线程代码的经验,开始的章节仍有必要浏览一下,这样就能清楚地知道,你所熟知的工具在新的C++标准中对应了哪些工具。如果使用原子变量去做一些底层工作,第5章必须阅读。第8章,有关C++多线程的异常和安全性的内容很值得一看。如果你对某些关键词比较感兴趣,索引和目录能够帮你快速找到相关的内容。

你可能喜欢回顾主要的章节,并用自己的方式阅读示例代码。虽然你已经了解C++线程库,但附录D还是很有用。例如,查找每个类和函数的细节。

代码公约和下载

为了区分普通文本,清单和正文中的中的所有代码都采用像这样的固定宽度的字体。许多清单都伴随着代码注释,突出显示重要的概念。在某些情况下,你可以通过页下给出的快捷链接进行查阅。

本书所有实例的源代码,可在出版商的网站上进行下载:www.manning.com/books/c-plus-plus-concurrency-in-action-second-edition。

你也可以从github上下载源码:https://github.com/anthonywilliams/ccia_code_samples。

软件需求

使用书中的代码,可能需要一个较新的C++编译器(要支持C++17语言的特性(见附录A)),还需要C++支持标准线程库。

写本书的时候,最新版本的g++、clang++和Microsoft Visual Studio都对C++17的标准现成库进行了实现。他们也会支持附录中的大多数语言特性,那些目前还不被支持的特性也会逐渐被支持。

我的公司Software Solutions Ltd,销售C++11标准线程库的完整实现,其可以使用在一些就的编译器上,以及为新版本的clang、gcc和Microsoft Visual Studio实现的并发TS[1]。这个线程库也可以用来测试本书中的例子。

Boost线程库[2]提供的API,以及可移植到多个平台。本书中的大多数例子将std::替换为boost::,再#include引用适当的头文件,就能使用Boost线程库来运行。还有部分工具还不支持(例如std::async)或在Boost线程库中有着不同名字(例如:boost::unique_future)。

作者在线

购买C++ Concurrency in Action就能访问曼宁(Manning Publications)的私人网络论坛,在那里可以对本书做一些评论,问一些技术问题,获得作者或其他读者的帮助。

为了能够访问论坛和订阅它的内容,在浏览器地址中输入 https://www.manning.com/books/c-plus-plus-concurrency-in-action-second-edition

https://forums.manning.com/forums/about 页面将告诉你如何注册之后访问论坛,你能获得什么样的帮助,还有论坛中的一些规则。

曼宁保证为本书的读者提供互相交流,以及和作者交流的场所。虽然曼宁自愿维护本书的论坛,但不保证这样的场所不会收取任何的费用。所以,建议你可以尝试提一些有挑战性的问题给作者,免得这样的地方白白浪费。


[1] The just::thread implementation of the C++ Standard Thread Library, http://www.stdthread.co.uk.

[2] The Boost C++ library collection, http://www.boost.org.