C++的并发编程

概述

C++ 在 C++ 11 标准中正式增加了对并发的支持,不仅包含了线程内存模型,还在 C++ 的标准库中扩展了管理线程的类、共享数据保护、线程同步以及低级操作原语。

C++ 14 和 C++ 17 标准随后又增加了其他扩展。同时在标准库的具体实现下,兼顾性能,尽可能地减小抽象惩罚(abstraction penalty)

参考 《C++ Concurrency in Action. 2nd Edition》 by Anthony Williams.

线程管理

使用 RAII 来等待线程完成。RAII 的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。
具体使用时,可以利用局部变量自动销毁的机制,在变量的析构函数中释放资源(或其他操作,如线程 join 等)。RAII 比较典型的应用场景是对资源的管理。

分离线程(detach)

线程共享数据

同步

内存模型和原子类型操作

并发数据结构(有锁和无锁)