18.2. C++与并发

并发的概念是在 C++11 中引入语言标准的,在那之前人们早已用 C++ 编写并发程序。本章的目的并非介绍并发,甚至不是介绍 C++ 中的并发。这个主题在文献中已有充分的论述(在本书出版时,Anthony Williams 所著的《C++ Concurrency in Action》一书就是一部既全面又内容更新的著作)。此外,尽管并发几乎总是用于提升性能,但在此我们不会直接讨论性能和优化问题;关于这方面,可以参考我的另一本书《The Art of Writing Efficient Programs》。我们将重点关注并发软件设计中出现的问题。

概括来说,我们在开发并发程序时会遇到三类挑战。第一,如何确保当多个线程同时操作同一数据时程序的正确性?第二,如何将程序的工作分配到多个线程上以提升整体性能?第三,如何设计软件,使其在增加了并发的复杂性之后,依然能够分析、理解其功能并进行维护?

第一类挑战大体上与数据共享和同步有关。我们将首先考察相关的模式:程序的正确性是首要的,一个性能卓越却会崩溃或产生不可信结果的程序毫无用处。