并发支持库
来自cppreference.com
                    
                                        
                    < cpp
                    
                                                            
                    C++ 包含线程、原子操作、互斥、条件变量和 future 的内建支持。
线程
线程使得程序能在数个处理器核心同时执行。
| 定义于头文件  <thread> | |
| (C++11) | 管理单独的线程 (类) | 
| (C++20) | 有自动合并和取消支持的 std::thread (类) | 
| 管理当前线程的函数 | |
| 定义于命名空间  this_thread | |
| (C++11) | 建议实现重新调度各执行线程 (函数) | 
| (C++11) | 返回当前线程的线程 id (函数) | 
| (C++11) | 使当前线程的执行停止指定的时间段 (函数) | 
| (C++11) | 使当前线程的执行停止直到指定的时间点 (函数) | 
| 线程取消
 | (C++20 起) | ||||||||
缓存大小访问
| 定义于头文件  <new> | |
| 避免假共享的最小偏移 促使真共享的最大偏移 (常量) | |
原子操作
这些组建为细粒度的原子操作提供,允许无锁并发编程。涉及同一对象的每个原子操作,相对于任何其他原子操作是不可分的。原子对象不具有数据竞争。
| 
 | (C++23 起) | 
| 定义于头文件  <atomic> | |
| 原子类型 | |
| (C++11) | atomic 类模板及其针对布尔、整型和指针类型的特化 (类模板) | 
| (C++20) | 提供非原子对象上的原子操作 (类模板) | 
| 原子类型上的操作 | |
| (C++11) | 检查对该原子类型的操作是否是无锁的 (函数模板) | 
| (C++11)(C++11) | 原子地以非原子实参替换原子对象的值 (函数模板) | 
| (C++11)(C++11) | 原子地获得存储于原子对象的值 (函数模板) | 
| (C++11)(C++11) | 原子地以非原子实参的值替换原子对象的值,并返回该原子对象的旧值 (函数模板) | 
| 原子地比较原子对象和非原子实参的值,若相等则进行 atomic_exchange,若不相等则进行 atomic_load (函数模板) | |
| (C++11)(C++11) | 将非原子值加到原子对象,并获得原子对象的先前值 (函数模板) | 
| (C++11)(C++11) | 从原子对象减去非原子值,并获得原子对象的先前值 (函数模板) | 
| (C++11)(C++11) | 将原子对象替换为与非原子实参逐位与的结果,并获得原子对象的先前值 (函数模板) | 
| (C++11)(C++11) | 将原子对象替换为与非原子实参逐位或的结果,并获得原子对象的先前值 (函数模板) | 
| (C++11)(C++11) | 将原子对象替换为与非原子实参逐位异或的结果,并获得原子对象的先前值 (函数模板) | 
| (C++20)(C++20) | 阻塞线程直至被提醒且原子值更改 (函数模板) | 
| (C++20) | 提醒一个在 atomic_wait中阻塞的线程(函数模板) | 
| (C++20) | 提醒所有在 atomic_wait中阻塞的线程(函数模板) | 
| 标志类型及操作 | |
| (C++11) | 免锁的布尔原子类型 (类) | 
| 原子地设置标志为 true 并返回其先前值 (函数) | |
| (C++11)(C++11) | 原子地设置标志值为 false (函数) | 
| (C++20)(C++20) | 原子地返回标志的值 (函数) | 
| (C++20)(C++20) | 阻塞线程,直至被提醒且标志更改 (函数) | 
| (C++20) | 提醒一个在 atomic_flag_wait中阻塞的线程(函数) | 
| (C++20) | 提醒所有在 atomic_flag_wait中阻塞的线程(函数) | 
| 初始化 | |
| (C++11)(C++20 中弃用) | 对默认构造的原子对象进行非原子初始化 (函数模板) | 
| (C++11)(C++20 中弃用) | 静态存储期的原子对象的常量初始化 (宏函数) | 
| (C++11) | 将 std::atomic_flag 初始化为 false (宏常量) | 
| 内存同步顺序 | |
| (C++11) | 为给定的原子操作定义内存顺序约束 (枚举) | 
| (C++11) | 从 std::memory_order_consume 依赖树移除指定对象 (函数模板) | 
| (C++11) | 通用的依赖内存顺序的栅栏同步原语 (函数) | 
| (C++11) | 线程与执行于同一线程的信号处理函数间的栅栏 (函数) | 
| 定义于头文件  <stdatomic.h> | |
| C 兼容宏 | |
| (C++23) | 使得 _Atomic(T) 等同于 std::atomic<T> 的兼容性宏 (宏函数) | 
互斥
互斥算法避免多个线程同时访问共享资源。这会避免数据竞争,并提供线程间的同步支持。
| 定义于头文件  <mutex> | |
| (C++11) | 提供基本互斥设施 (类) | 
| (C++11) | 提供互斥设施,实现有时限锁定 (类) | 
| (C++11) | 提供能被同一线程递归锁定的互斥设施 (类) | 
| (C++11) | 提供能被同一线程递归锁定的互斥设施,并实现有时限锁定 (类) | 
| 定义于头文件  <shared_mutex> | |
| (C++17) | 提供共享互斥设施 (类) | 
| (C++14) | 提供共享互斥设施并实现有时限锁定 (类) | 
| 通用互斥管理 | |
| 定义于头文件  <mutex> | |
| (C++11) | 实现严格基于作用域的互斥体所有权包装器 (类模板) | 
| (C++17) | 用于多个互斥体的免死锁 RAII 封装器 (类模板) | 
| (C++11) | 实现可移动的互斥体所有权包装器 (类模板) | 
| (C++14) | 实现可移动的共享互斥体所有权封装器 (类模板) | 
| (C++11)(C++11)(C++11) | 用于指定锁定策略的标签类型 (类) | 
| (C++11)(C++11)(C++11) | 用于指定锁定策略的标签常量 (常量) | 
| 通用锁定算法 | |
| (C++11) | 试图通过重复调用 try_lock获得互斥体的所有权(函数模板) | 
| (C++11) | 锁定指定的互斥体,若任何一个不可用则阻塞 (函数模板) | 
| 单次调用 | |
| (C++11) | 确保 call_once 只调用函数一次的帮助对象 (类) | 
| (C++11) | 仅调用函数一次,即使从多个线程调用 (函数模板) | 
条件变量
条件变量是允许多个线程相互交流的同步原语。它允许一定量的线程等待(可以定时)另一线程的提醒,然后再继续。条件变量始终关联到一个互斥。
| 定义于头文件  <condition_variable> | |
| (C++11) | 提供与 std::unique_lock 关联的条件变量 (类) | 
| (C++11) | 提供与任何锁类型关联的条件变量 (类) | 
| (C++11) | 安排到在此线程完全结束时对 notify_all的调用(函数) | 
| (C++11) | 列出条件变量上定时等待的可能结果 (枚举) | 
| 信号量信号量 (semaphore) 是一种轻量的同步原件,用于制约对共享资源的并发访问。在可以使用两者时,信号量能比条件变量更有效率。 
 锁存器与屏障锁存器 (latch) 与屏障 (barrier) 是线程协调机制,允许任何数量的线程阻塞直至期待数量的线程到达该屏障。锁存器不能复用,屏障能重复使用。 
 
 | (C++20 起) | ||||||||||||||
Future
标准库提供了一些工具来获取异步任务(即在单独的线程中启动的函数)的返回值,并捕捉其所抛出的异常。这些值在共享状态中传递,其中异步任务可以写入其返回值或存储异常,而且可以由持有该引用该共享态的 std::future 或 std::shared_future 实例的线程检验、等待或是操作这个状态。
| 定义于头文件  <future> | |
| (C++11) | 存储一个值以进行异步获取 (类模板) | 
| (C++11) | 打包一个函数,存储其返回值以进行异步获取 (类模板) | 
| (C++11) | 等待被异步设置的值 (类模板) | 
| (C++11) | 等待被异步设置的值(可能为其他 future 所引用) (类模板) | 
| (C++11) | 异步运行一个函数(有可能在新线程中执行),并返回保有其结果的 std::future (函数模板) | 
| (C++11) | 指定 std::async 所用的运行策略 (枚举) | 
| (C++11) | 指定在 std::future 和 std::shared_future 上的定时等待的结果 (枚举) | 
| Future 错误 | |
| (C++11) | 报告与 future 或 promise 有关的错误 (类) | 
| (C++11) | 鉴别 future 错误类别 (函数) | 
| (C++11) | 鉴别 future 错误码 (枚举) |