命名空间
变体
操作

并发支持库 (自 C++11 起)

来自 cppreference.cn
< cpp
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(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++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
危害指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中已弃用)
(C++11)(C++20 中已弃用)
内存顺序
(C++11)(C++26 中已弃用)
原子操作的自由函数
原子标志的自由函数
 

C++ 内建了对线程、原子操作、互斥、条件变量和期物的支持。

目录

[编辑] 线程

线程使程序能够在多个处理器核心上执行。

定义于头文件 <thread>
(C++11)
管理一个独立的线程
(class) [编辑]
(C++20)
支持自动加入和取消的 std::thread
(class) [编辑]
管理当前线程的函数
定义于命名空间 this_thread
(C++11)
建议实现重新调度线程的执行
(function) [编辑]
(C++11)
返回当前线程的线程 id
(function) [编辑]
(C++11)
停止当前线程的执行指定的时间段
(function) [编辑]
停止当前线程的执行直到指定的时间点
(function) [编辑]

[编辑] 协作式取消 (自 C++20 起)

停止源停止令牌停止回调 组件可用于异步请求操作及时停止执行,通常是因为不再需要结果。这种请求称为停止请求

这些组件指定了对停止状态的共享访问的语义。 任何对同一停止状态进行建模的组件对象分别是关联的停止源、停止令牌或停止回调。

概念 stoppable-sourcestoppable_tokenstoppable-callback-for 分别指定了停止源、停止令牌和停止回调的所需语法和模型语义。

(自 C++26 起)

它们被设计为

  • 用于执行由 execution::connect 创建的异步操作的停止完成,
(自 C++26 起)
  • 或用于自定义执行管理实现。

实际上,它们甚至不需要用于“停止”任何事物,而是可以用于线程安全的一次性函数调用触发器,例如。

定义于头文件 <stop_token>
停止令牌类型
用于查询是否已发出 std::jthread 取消请求的接口
(class) [编辑]
提供停止令牌接口,其中停止永远不可能或不会被请求
(class) [编辑]
引用其关联的 std::inplace_stop_source 对象的停止状态的停止令牌
(class) [编辑]
停止源类型
表示停止一个或多个 std::jthread 的请求的类
(class) [编辑]
作为停止状态的唯一所有者的 stoppable-source
(class) [编辑]
停止回调类型
用于在 std::jthread 取消时注册回调的接口
(class template) [编辑]
std::inplace_stop_token 的停止回调
(class template) [编辑]
获取给定停止令牌类型的回调类型
(alias template)[编辑]
概念 (自 C++20 起)
指定停止令牌的基本接口,该接口允许查询停止请求以及停止请求是否可能
(concept) [编辑]
指定不允许停止的停止令牌
(concept) [编辑]
指定类型是关联的停止令牌的工厂,并且可以对其发出停止请求
(仅供演示的概念*)[编辑]
指定用于使用给定的停止令牌类型注册回调的接口
(仅供演示的概念*)[编辑]

[编辑] 缓存大小访问 (自 C++17 起)

定义于头文件 <new>
避免伪共享的最小偏移量
促进真共享的最大偏移量
(常量) [编辑]

[编辑] 原子操作

这些组件为细粒度的原子操作提供支持,从而实现无锁并发编程。每个原子操作对于涉及同一对象的任何其他原子操作都是不可分的。原子对象是无数据竞争的。

定义于头文件 <atomic>
原子类型
(C++11)
atomic 类模板以及 bool、整型、浮点型、(自 C++20 起) 和指针类型的特化
(class template) [编辑]
为非原子对象提供原子操作
(class template) [编辑]
原子类型上的操作
检查原子类型的操作是否为无锁的
(function template) [编辑]
原子地用非原子参数替换原子对象的值
(function template) [编辑]
原子地获取存储在原子对象中的值
(function template) [编辑]
原子地用非原子参数替换原子对象的值,并返回原子的旧值
(function template) [编辑]
原子地将原子对象的值与非原子参数进行比较,如果相等则执行原子交换,否则执行原子加载
(function template) [编辑]
将非原子值添加到原子对象,并获取原子的先前值
(function template) [编辑]
从原子对象中减去非原子值,并获取原子的先前值
(function template) [编辑]
用按位与非原子参数的结果替换原子对象,并获取原子的先前值
(function template) [编辑]
用按位或非原子参数的结果替换原子对象,并获取原子的先前值
(function template) [编辑]
用按位异或非原子参数的结果替换原子对象,并获取原子的先前值
(function template) [编辑]
用与非原子参数的 std::max 结果替换原子对象,并获取原子的先前值
(function template) [编辑]
用与非原子参数的 std::min 结果替换原子对象,并获取原子的先前值
(function template) [编辑]
阻塞线程直到收到通知且原子值发生更改
(function template) [编辑]
通知在 atomic_wait 中阻塞的线程
(function template) [编辑]
通知在 atomic_wait 中阻塞的所有线程
(function template) [编辑]
标志类型和操作
无锁布尔原子类型
(class) [编辑]
原子地将标志设置为 true 并返回其先前值
(function) [编辑]
原子地将标志的值设置为 false
(function) [编辑]
原子地返回标志的值
(function) [编辑]
阻塞线程直到收到通知且标志发生更改
(function) [编辑]
通知在 atomic_flag_wait 中阻塞的线程
(function) [编辑]
通知在 atomic_flag_wait 中阻塞的所有线程
(function) [编辑]
初始化
(C++11)(C++20 中已弃用)
默认构造的原子对象的非原子初始化
(function template) [编辑]
(C++11)(C++20 中已弃用)
静态存储持续时间的原子变量的常量初始化
(function macro) [编辑]
std::atomic_flag 初始化为 false
(macro constant) [编辑]
内存同步顺序
为给定的原子操作定义内存顺序约束
(enum) [编辑]
(C++11)(C++26 中已弃用)
std::memory_order_consume 依赖树中移除指定的对象
(function template) [编辑]
通用内存顺序相关的栅栏同步原语
(function) [编辑]
线程与在同一线程中执行的信号处理程序之间的栅栏
(function) [编辑]
定义于头文件 <stdatomic.h>
C 兼容性宏 (自 C++23 起)
(C++23)
兼容性宏,使得 _Atomic(T)std::atomic<T> 相同
(function macro) [编辑]

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

[编辑] 互斥

互斥算法阻止多个线程同时访问共享资源。这可以防止数据竞争,并为线程之间的同步提供支持。

定义于头文件 <mutex>
(C++11)
提供基本的互斥设施
(class) [编辑]
提供互斥设施,该设施实现带超时的锁定
(class) [编辑]
提供互斥设施,同一线程可以递归锁定该设施
(class) [编辑]
提供可以递归锁定的互斥设施
由同一线程锁定,并实现带超时的锁定
(class) [编辑]
定义于头文件 <shared_mutex>
提供共享互斥设施
(class) [编辑]
提供共享互斥设施,并实现带超时的锁定
(class) [编辑]
通用互斥量管理
定义于头文件 <mutex>
实现严格的基于作用域的互斥量所有权包装器
(class template) [编辑]
用于多个互斥量的避免死锁的 RAII 包装器
(class template) [编辑]
实现可移动的互斥量所有权包装器
(class template) [编辑]
实现可移动的共享互斥量所有权包装器
(class template) [编辑]
用于指定锁定策略的标签
(tag)[编辑]
通用锁定算法
(C++11)
尝试通过重复调用 try_lock 来获取互斥量的所有权
(function template) [编辑]
(C++11)
锁定指定的互斥量,如果任何互斥量不可用则阻塞
(function template) [编辑]
调用一次
(C++11)
帮助对象,以确保 call_once 仅调用函数一次
(class) [编辑]
(C++11)
即使从多个线程调用,也仅调用函数一次
(function template) [编辑]

[编辑] 条件变量

条件变量是一种同步原语,允许多个线程相互通信。它允许一些线程等待(可能带有超时)来自另一个线程的通知,以便它们可以继续执行。条件变量始终与互斥量相关联。

定义于头文件 <condition_variable>
提供与 std::unique_lock 关联的条件变量
(class) [编辑]
提供与任何锁类型关联的条件变量
(class) [编辑]
计划在此线程完全完成时调用 notify_all
(function) [编辑]
(C++11)
列出条件变量上定时等待的可能结果
(enum) [编辑]

[编辑] 信号量 (C++20 起)

信号量是一种轻量级的同步原语,用于约束对共享资源的并发访问。当两者都适用时,信号量可能比条件变量更有效率。

定义于头文件 <semaphore>
对非负资源计数建模的信号量
(类模板) [编辑]
只有两种状态的信号量
(类型别名) [编辑]

[编辑] 闩锁和屏障 (C++20 起)

闩锁和屏障是线程协调机制,允许任意数量的线程阻塞,直到预期数量的线程到达。闩锁不能重复使用,而屏障可以重复使用。

定义于头文件 <latch>
(C++20)
单次使用的线程屏障
(类) [编辑]
定义于头文件 <barrier>
(C++20)
可重复使用的线程屏障
(类模板) [编辑]

[编辑] 期物

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

定义于头文件 <future>
(C++11)
存储一个值以供异步检索
(类模板) [编辑]
封装一个函数以存储其返回值,供异步检索
(类模板) [编辑]
(C++11)
等待异步设置的值
(类模板) [编辑]
等待异步设置的值(可能被其他期物引用)
(类模板) [编辑]
(C++11)
异步运行一个函数(可能在新线程中),并返回一个将持有结果的 std::future
(函数模板) [编辑]
(C++11)
指定 std::async 的启动策略
(枚举) [编辑]
指定对 std::futurestd::shared_future 执行的定时等待的结果
(枚举) [编辑]
期物错误
报告与期物或承诺相关的错误
(类) [编辑]
标识期物错误类别
(函数) [编辑]
标识期物错误代码
(枚举) [编辑]

[编辑] 安全回收 (C++26 起)

安全回收技术最常用于直接解决访问-删除竞争。

读取-复制-更新机制
定义于头文件 <rcu>
允许对象受 RCU 保护
(类模板) [编辑]
提供 RCU 保护区域
(类) [编辑]
返回对 std::rcu_domain 类型的静态持续时间对象的引用
(函数) [编辑]
阻塞直到 RCU 域上的保护区域解锁
(函数) [编辑]
可能评估 RCU 域上的计划操作,并阻塞直到所有先前的评估完成
(函数) [编辑]
在 RCU 域上调度指定函数的评估,可能分配内存,并调用计划的评估
(函数模板) [编辑]
危害指针
定义于头文件 <hazard_pointer>
允许对象可进行危害保护
(类模板) [编辑]
单写多读指针,在任何时间点最多只能由一个线程拥有
(类) [编辑]
构造危害指针
(函数) [编辑]

[编辑] 参见

C 文档 关于 并发支持库