并发支持库

来自cppreference.com
< cpp
 
 
并发支持库
线程
(C++11)
(C++20)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中弃用)
(C++11)(C++20 中弃用)
原子操作的自由函数
原子标志的自由函数
内存序
互斥
(C++11)
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩与屏障
(C++20)
(C++20)
future
(C++11)
(C++11)
(C++11)
(C++11)
 

C++ 包含线程、原子操作、互斥、条件变量和 future 的内建支持。

线程

线程使得程序能在数个处理器核心同时执行。

在标头 <thread> 定义
(C++11)
管理单独的线程
(类)
(C++20)
有自动合并和取消支持的 std::thread
(类)
管理当前线程的函数
在命名空间 this_thread 定义
(C++11)
建议实现重新调度各执行线程
(函数)
(C++11)
返回当前线程的线程 id
(函数)
(C++11)
使当前线程的执行停止指定的时间段
(函数)
使当前线程的执行停止直到指定的时间点
(函数)

线程取消

在标头 <stop_token> 定义
查询是否已经做出 std::jthread 取消请求的接口
(类)
表示请求停止一个或多个 std::jthread 的类
(类)
std::jthread 取消上注册回调的接口
(类模板)
(C++20 起)

缓存大小访问

在标头 <new> 定义
避免假共享的最小偏移
促使真共享的最大偏移
(常量)

原子操作

这些组建为细粒度的原子操作提供,允许无锁并发编程。涉及同一对象的每个原子操作,相对于任何其他原子操作是不可分的。原子对象不具有数据竞争

<stdatomic.h> 以外的 C++ 标准库头文件不提供 _Atomic 宏或任何非宏的全局命名空间声明。

(C++23 起)
在标头 <atomic> 定义
原子类型
(C++11)
atomic 类模板及其针对布尔、整型和指针类型的特化
(类模板)
提供非原子对象上的原子操作
(类模板)
原子类型上的操作
检查对该原子类型的操作是否是无锁的
(函数模板)
原子地以非原子实参替换原子对象的值
(函数模板)
原子地获得存储于原子对象的值
(函数模板)
原子地以非原子实参的值替换原子对象的值,并返回该原子对象的旧值
(函数模板)
原子地比较原子对象和非原子实参的值,相等时进行原子交换,不相等时进行原子加载
(函数模板)
将非原子值加到原子对象,并获得原子对象的先前值
(函数模板)
从原子对象减去非原子值,并获得原子对象的先前值
(函数模板)
将原子对象替换为与非原子实参逐位与的结果,并获得原子对象的先前值
(函数模板)
将原子对象替换为与非原子实参逐位或的结果,并获得原子对象的先前值
(函数模板)
将原子对象替换为与非原子实参逐位异或的结果,并获得原子对象的先前值
(函数模板)
阻塞线程直至被提醒且原子值更改
(函数模板)
提醒一个在 atomic_wait 中阻塞的线程
(函数模板)
提醒所有在 atomic_wait 中阻塞的线程
(函数模板)
标志类型及操作
免锁的布尔原子类型
(类)
原子地设置标志为 true 并返回其先前值
(函数)
原子地设置标志值为 false
(函数)
原子地返回标志的值
(函数)
阻塞线程,直至被提醒且标志更改
(函数)
提醒一个在 atomic_flag_wait 中阻塞的线程
(函数)
提醒所有在 atomic_flag_wait 中阻塞的线程
(函数)
初始化
(C++11)(C++20 中弃用)
对默认构造的原子对象进行非原子初始化
(函数模板)
(C++11)(C++20 中弃用)
静态存储期的原子对象的常量初始化
(宏函数)
std::atomic_flag 初始化为 false
(宏常量)
内存同步顺序
为给定的原子操作定义内存顺序约束
(枚举)
std::memory_order_consume 依赖树移除指定对象
(函数模板)
通用的依赖内存顺序的栅栏同步原语
(函数)
线程与执行于同一线程的信号处理函数间的栅栏
(函数)
在标头 <stdatomic.h> 定义
C 兼容宏
(C++23)
使得 _Atomic(T) 等同于 std::atomic<T> 的兼容性宏
(宏函数)

互斥

互斥算法避免多个线程同时访问共享资源。这会避免数据竞争,并提供线程间的同步支持。

在标头 <mutex> 定义
(C++11)
提供基本互斥设施
(类)
提供互斥设施,实现有时限锁定
(类)
提供能被同一线程递归锁定的互斥设施
(类)
提供能被同一线程递归锁定的互斥设施,并实现有时限锁定
(类)
在标头 <shared_mutex> 定义
提供共享互斥设施
(类)
提供共享互斥设施并实现有时限锁定
(类)
通用互斥管理
在标头 <mutex> 定义
实现严格基于作用域的互斥体所有权包装器
(类模板)
用于多个互斥体的免死锁 RAII 封装器
(类模板)
实现可移动的互斥体所有权包装器
(类模板)
实现可移动的共享互斥体所有权封装器
(类模板)
用于指定锁定策略的标签类型
(类)
用于指定锁定策略的标签常量
(常量)
通用锁定算法
(C++11)
试图通过重复调用 try_lock 获得互斥体的所有权
(函数模板)
(C++11)
锁定指定的互斥体,若任何一个不可用则阻塞
(函数模板)
单次调用
(C++11)
确保 call_once 只调用函数一次的帮助对象
(类)
(C++11)
仅调用函数一次,即使从多个线程调用
(函数模板)

条件变量

条件变量是允许多个线程相互交流的同步原语。它允许一定量的线程等待(可以定时)另一线程的提醒,然后再继续。条件变量始终关联到一个互斥。

在标头 <condition_variable> 定义
提供与 std::unique_lock 关联的条件变量
(类)
提供与任何锁类型关联的条件变量
(类)
安排到在此线程完全结束时对 notify_all 的调用
(函数)
(C++11)
列出条件变量上定时等待的可能结果
(枚举)

信号量

信号量 (semaphore) 是一种轻量的同步原件,用于制约对共享资源的并发访问。在可以使用两者时,信号量能比条件变量更有效率。

在标头 <semaphore> 定义
实现非负资源计数的信号量
(类模板)
仅拥有二个状态的信号量
(typedef)

锁存器与屏障

锁存器 (latch) 与屏障 (barrier) 是线程协调机制,允许任何数量的线程阻塞直至期待数量的线程到达该屏障。锁存器不能复用,屏障能重复使用。

在标头 <latch> 定义
(C++20)
单次使用的线程屏障
(类)
在标头 <barrier> 定义
(C++20)
可复用的线程屏障
(类模板)


(C++20 起)

Future

标准库提供了一些工具来获取异步任务(即在单独的线程中启动的函数)的返回值,并捕捉其所抛出的异常。这些值在共享状态中传递,其中异步任务可以写入其返回值或存储异常,而且可以由持有该引用该共享态的 std::futurestd::shared_future 实例的线程检验、等待或是操作这个状态。


在标头 <future> 定义
(C++11)
存储一个值以进行异步获取
(类模板)
打包一个函数,存储其返回值以进行异步获取
(类模板)
(C++11)
等待被异步设置的值
(类模板)
等待被异步设置的值(可能为其他 future 所引用)
(类模板)
(C++11)
异步运行一个函数(有可能在新线程中执行),并返回保有它的结果的 std::future
(函数模板)
(C++11)
指定 std::async 所用的运行策略
(枚举)
指定在 std::futurestd::shared_future 上的定时等待的结果
(枚举)
Future 错误
报告与 future 或 promise 有关的错误
(类)
鉴别 future 错误类别
(函数)
鉴别 future 错误码
(枚举)

参阅