August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
并发,也就是多个任务同时执行,被广泛用于提高吞吐率(用多个处理器共同完成单个运算)和提高响应速度(允许程序的一部分在等待响应时,另一部分继续执行)。所有的现代程序设计语言都提供了对并发的支持。C++标准库并发设施的前身在C++中已应用超过20年了,经过对可移植性和类型安全的改进,成为标准库的一部分,它几乎适用于所有现代硬件平台。标准库并发设施重点提供系统级并发机制,而不是直接提供复杂的高层并发模型。基于标准库并发设施,可以构建出提供这类高层并发模型的库。
标准库直接支持在单一地址空间内并发执行多个线程。为此,C++提供了一个适合的内存模型和一套原子操作。原子操作可实现无锁的并发程序设计[Dchev,2010],内存模型则保证了:只要程序员避免了数据竞争(对可变数据的不受控制的并发访问),程序运行结果就是可预料的。但是,大多数用户眼中的并发就是标准库设施以及建立在其上的其他并发库。因此,本章简要介绍主要的标准库并发设施——thread、mutex、lock()操作、packaged_task和future,给出一些示例。这些特性直接建立在操作系统并发机制之上,与系统原始机制相比,它们并不会带来额外的性能开销,当然也不保证有显著性能提升。
不要将并发看作万能灵药。如果串行执行已经能很好地完成一个任务,那么使用串行程序就好了,这通常更简单也会更快。
显式使用并发特性的一个替代选择是并行算法,我们通常可以使用并行算法来利用多个执行单元提高性能(参见12.9节、14.3.1节)。
Read now
Unlock full access