C++
编译器支持
独立式和宿主式
语言
标准库
标准库头文件
具名要求
特性测试宏 (C++20)
语言支持库
概念库 (C++20)
诊断库
内存管理库
元编程库 (C++11)
通用工具库
容器库
迭代器库
范围库 (C++20)
算法库
字符串库
文本处理库
数值库
日期和时间库
输入/输出库
文件系统库 (C++17)
并发支持库 (自 C++11 起)
执行控制库 (C++26)
技术规范
符号索引
外部库
[编辑] 并发支持库
线程
thread(C++11)
jthread(C++20)
hardware_destructive_interference_sizehardware_constructive_interference_size(C++17)(C++17)
this_thread 命名空间
get_id(C++11)
yield(C++11)
sleep_for(C++11)
sleep_until(C++11)
协作式取消
stop_token(C++20)
inplace_stop_token(C++26)
never_stop_token(C++26)
stop_source(C++20)
inplace_stop_source(C++26)
stop_callback(C++20)
inplace_stop_callback(C++26)
stop_callback_for_t(C++26)
stoppable_token(C++26)
unstoppable_token(C++26)
stoppable-source(C++26)
stoppable-callback-for(C++26)
互斥
mutex(C++11)
recursive_mutex(C++11)
shared_mutex(C++17)
timed_mutex(C++11)
recursive_timed_mutex(C++11)
shared_timed_mutex(C++14)
通用锁管理
lock(C++11)
lock_guard(C++11)
scoped_lock(C++17)
unique_lock(C++11)
shared_lock(C++14)
once_flag(C++11)
call_once(C++11)
try_lock(C++11)
defer_locktry_to_lockadopt_lockdefer_lock_ttry_to_lock_tadopt_lock_t(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
条件变量
condition_variable(C++11)
condition_variable_any(C++11)
notify_all_at_thread_exit(C++11)
cv_status(C++11)
信号量
counting_semaphorebinary_semaphore(C++20)(C++20)
闩锁和栅栏
latch(C++20)
barrier(C++20)
期物
promise(C++11)
future(C++11)
shared_future(C++11)
packaged_task(C++11)
async(C++11)
launch(C++11)
future_status(C++11)
future_error(C++11)
future_category(C++11)
future_errc(C++11)
安全回收
rcu_obj_base(C++26)
rcu_domain(C++26)
rcu_default_domain(C++26)
rcu_synchronize(C++26)
rcu_barrier(C++26)
rcu_retire(C++26)
危害指针
hazard_pointer_obj_base(C++26)
hazard_pointer(C++26)
make_hazard_pointer(C++26)
原子类型
atomic(C++11)
atomic_ref(C++20)
atomic_flag(C++11)
原子类型的初始化
atomic_init(C++11)(C++20 中已弃用)
ATOMIC_VAR_INIT(C++11)(C++20 中已弃用)
ATOMIC_FLAG_INIT(C++11)
内存顺序
memory_order(C++11)
kill_dependency(C++11)(C++26 中已弃用)
atomic_thread_fence(C++11)
atomic_signal_fence(C++11)
原子操作的自由函数
atomic_storeatomic_store_explicit(C++11)(C++11)
atomic_loadatomic_load_explicit(C++11)(C++11)
atomic_exchangeatomic_exchange_explicit(C++11)(C++11)
atomic_compare_exchange_weakatomic_compare_exchange_weak_explicitatomic_compare_exchange_strongatomic_compare_exchange_strong_explicit(C++11)(C++11)(C++11)(C++11)
atomic_fetch_addatomic_fetch_add_explicit(C++11)(C++11)
atomic_fetch_subatomic_fetch_sub_explicit(C++11)(C++11)
atomic_fetch_andatomic_fetch_and_explicit(C++11)(C++11)
atomic_fetch_oratomic_fetch_or_explicit(C++11)(C++11)
atomic_fetch_xoratomic_fetch_xor_explicit(C++11)(C++11)
atomic_fetch_maxatomic_fetch_max_explicit(C++26)(C++26)
atomic_fetch_minatomic_fetch_min_explicit(C++26)(C++26)
atomic_is_lock_free(C++11)
atomic_waitatomic_wait_explicit(C++20)(C++20)
atomic_notify_one(C++20)
atomic_notify_all(C++20)
原子标志的自由函数
atomic_flag_test_and_setatomic_flag_test_and_set_explicit(C++11)(C++11)
atomic_flag_clearatomic_flag_clear_explicit(C++11)(C++11)
atomic_flag_testatomic_flag_test_explicit(C++20)(C++20)
atomic_flag_waitatomic_flag_wait_explicit(C++20)(C++20)
atomic_flag_notify_one(C++20)
atomic_flag_notify_all(C++20)
[编辑]
C++ 内建了对线程、原子操作、互斥、条件变量和期物的支持。
目录
1 线程
1.1 管理当前线程的函数
2 协作式取消 (自 C++20 起)
2.1 停止令牌类型
2.2 停止源类型
2.3 停止回调类型
2.4 概念 (自 C++20 起)
3 缓存大小访问 (自 C++17 起)
4 原子操作
4.1 原子类型
4.2 原子类型上的操作
4.3 标志类型和操作
4.4 初始化
4.5 内存同步顺序
4.6 C 兼容性宏 (自 C++23 起)
5 互斥
5.1 通用互斥量管理
5.2 通用锁定算法
5.3 调用一次
6 条件变量
7 信号量 (自 C++20 起)
8 闩锁和栅栏 (自 C++20 起)
9 期物
9.1 期物错误
10 安全回收 (自 C++26 起)
10.1 读取-复制-更新机制
10.2 危害指针
11 参见
[编辑] 线程
线程使程序能够在多个处理器核心上执行。
定义于头文件
thread(C++11)
管理一个独立的线程 (class) [编辑]
jthread(C++20)
支持自动加入和取消的 std::thread (class) [编辑]
管理当前线程的函数
定义于命名空间 this_thread
yield(C++11)
建议实现重新调度线程的执行 (function) [编辑]
get_id(C++11)
返回当前线程的线程 id (function) [编辑]
sleep_for(C++11)
停止当前线程的执行指定的时间段 (function) [编辑]
sleep_until(C++11)
停止当前线程的执行直到指定的时间点 (function) [编辑]
[编辑] 协作式取消 (自 C++20 起)
停止源、停止令牌 和 停止回调 组件可用于异步请求操作及时停止执行,通常是因为不再需要结果。这种请求称为停止请求。
这些组件指定了对停止状态的共享访问的语义。 任何对同一停止状态进行建模的组件对象分别是关联的停止源、停止令牌或停止回调。
概念 stoppable-source、stoppable_token 和 stoppable-callback-for 分别指定了停止源、停止令牌和停止回调的所需语法和模型语义。
(自 C++26 起)
它们被设计为
用于协作式取消执行,例如 std::jthread,用于中断 std::condition_variable_any 等待函数,
用于执行由 execution::connect 创建的异步操作的停止完成,
(自 C++26 起)
或用于自定义执行管理实现。
实际上,它们甚至不需要用于“停止”任何事物,而是可以用于线程安全的一次性函数调用触发器,例如。
定义于头文件
停止令牌类型
stop_token(C++20)
用于查询是否已发出 std::jthread 取消请求的接口 (class) [编辑]
never_stop_token(C++26)
提供停止令牌接口,其中停止永远不可能或不会被请求 (class) [编辑]
inplace_stop_token(C++26)
引用其关联的 std::inplace_stop_source 对象的停止状态的停止令牌 (class) [编辑]
停止源类型
stop_source(C++20)
表示停止一个或多个 std::jthread 的请求的类 (class) [编辑]
inplace_stop_source(C++26)
作为停止状态的唯一所有者的 stoppable-source (class) [编辑]
停止回调类型
stop_callback(C++20)
用于在 std::jthread 取消时注册回调的接口 (class template) [编辑]
inplace_stop_callback(C++26)
std::inplace_stop_token 的停止回调 (class template) [编辑]
stop_callback_for_t(C++26)
获取给定停止令牌类型的回调类型(alias template)[编辑]
概念 (自 C++20 起)
stoppable_token(C++26)
指定停止令牌的基本接口,该接口允许查询停止请求以及停止请求是否可能 (concept) [编辑]
unstoppable_token(C++26)
指定不允许停止的停止令牌 (concept) [编辑]
stoppable-source(C++26)
指定类型是关联的停止令牌的工厂,并且可以对其发出停止请求(仅供演示的概念*)[编辑]
stoppable-callback-for(C++26)
指定用于使用给定的停止令牌类型注册回调的接口(仅供演示的概念*)[编辑]
[编辑] 缓存大小访问 (自 C++17 起)
定义于头文件
hardware_destructive_interference_sizehardware_constructive_interference_size(C++17)
避免伪共享的最小偏移量促进真共享的最大偏移量 (常量) [编辑]
[编辑] 原子操作
这些组件为细粒度的原子操作提供支持,从而实现无锁并发编程。每个原子操作对于涉及同一对象的任何其他原子操作都是不可分的。原子对象是无数据竞争的。
定义于头文件
原子类型
atomic(C++11)
atomic 类模板以及 bool、整型、浮点型、(自 C++20 起) 和指针类型的特化 (class template) [编辑]
atomic_ref(C++20)
为非原子对象提供原子操作 (class template) [编辑]
原子类型上的操作
atomic_is_lock_free(C++11)
检查原子类型的操作是否为无锁的 (function template) [编辑]
atomic_storeatomic_store_explicit(C++11)(C++11)
原子地用非原子参数替换原子对象的值 (function template) [编辑]
atomic_loadatomic_load_explicit(C++11)(C++11)
原子地获取存储在原子对象中的值 (function template) [编辑]
atomic_exchangeatomic_exchange_explicit(C++11)(C++11)
原子地用非原子参数替换原子对象的值,并返回原子的旧值 (function template) [编辑]
atomic_compare_exchange_weakatomic_compare_exchange_weak_explicitatomic_compare_exchange_strongatomic_compare_exchange_strong_explicit(C++11)(C++11)(C++11)(C++11)
原子地将原子对象的值与非原子参数进行比较,如果相等则执行原子交换,否则执行原子加载 (function template) [编辑]
atomic_fetch_addatomic_fetch_add_explicit(C++11)(C++11)
将非原子值添加到原子对象,并获取原子的先前值 (function template) [编辑]
atomic_fetch_subatomic_fetch_sub_explicit(C++11)(C++11)
从原子对象中减去非原子值,并获取原子的先前值 (function template) [编辑]
atomic_fetch_andatomic_fetch_and_explicit(C++11)(C++11)
用按位与非原子参数的结果替换原子对象,并获取原子的先前值 (function template) [编辑]
atomic_fetch_oratomic_fetch_or_explicit(C++11)(C++11)
用按位或非原子参数的结果替换原子对象,并获取原子的先前值 (function template) [编辑]
atomic_fetch_xoratomic_fetch_xor_explicit(C++11)(C++11)
用按位异或非原子参数的结果替换原子对象,并获取原子的先前值 (function template) [编辑]
atomic_fetch_maxatomic_fetch_max_explicit(C++26)(C++26)
用与非原子参数的 std::max 结果替换原子对象,并获取原子的先前值 (function template) [编辑]
atomic_fetch_minatomic_fetch_min_explicit(C++26)(C++26)
用与非原子参数的 std::min 结果替换原子对象,并获取原子的先前值 (function template) [编辑]
atomic_waitatomic_wait_explicit(C++20)(C++20)
阻塞线程直到收到通知且原子值发生更改 (function template) [编辑]
atomic_notify_one(C++20)
通知在 atomic_wait 中阻塞的线程 (function template) [编辑]
atomic_notify_all(C++20)
通知在 atomic_wait 中阻塞的所有线程 (function template) [编辑]
标志类型和操作
atomic_flag(C++11)
无锁布尔原子类型 (class) [编辑]
atomic_flag_test_and_setatomic_flag_test_and_set_explicit(C++11)(C++11)
原子地将标志设置为 true 并返回其先前值 (function) [编辑]
atomic_flag_clearatomic_flag_clear_explicit(C++11)(C++11)
原子地将标志的值设置为 false (function) [编辑]
atomic_flag_testatomic_flag_test_explicit(C++20)(C++20)
原子地返回标志的值 (function) [编辑]
atomic_flag_waitatomic_flag_wait_explicit(C++20)(C++20)
阻塞线程直到收到通知且标志发生更改 (function) [编辑]
atomic_flag_notify_one(C++20)
通知在 atomic_flag_wait 中阻塞的线程 (function) [编辑]
atomic_flag_notify_all(C++20)
通知在 atomic_flag_wait 中阻塞的所有线程 (function) [编辑]
初始化
atomic_init(C++11)(C++20 中已弃用)
默认构造的原子对象的非原子初始化 (function template) [编辑]
ATOMIC_VAR_INIT(C++11)(C++20 中已弃用)
静态存储持续时间的原子变量的常量初始化 (function macro) [编辑]
ATOMIC_FLAG_INIT(C++11)
将 std::atomic_flag 初始化为 false (macro constant) [编辑]
内存同步顺序
memory_order(C++11)
为给定的原子操作定义内存顺序约束 (enum) [编辑]
kill_dependency(C++11)(C++26 中已弃用)
从 std::memory_order_consume 依赖树中移除指定的对象 (function template) [编辑]
atomic_thread_fence(C++11)
通用内存顺序相关的栅栏同步原语 (function) [编辑]
atomic_signal_fence(C++11)
线程与在同一线程中执行的信号处理程序之间的栅栏 (function) [编辑]
定义于头文件
C 兼容性宏 (自 C++23 起)
_Atomic(C++23)
兼容性宏,使得 _Atomic(T) 与 std::atomic
_Atomic 宏和任何非宏全局命名空间声明均不由
[编辑] 互斥
互斥算法阻止多个线程同时访问共享资源。这可以防止数据竞争,并为线程之间的同步提供支持。
定义于头文件
mutex(C++11)
提供基本的互斥设施 (class) [编辑]
timed_mutex(C++11)
提供互斥设施,该设施实现带超时的锁定 (class) [编辑]
recursive_mutex(C++11)
提供互斥设施,同一线程可以递归锁定该设施 (class) [编辑]
recursive_timed_mutex(C++11)
提供可以递归锁定的互斥设施由同一线程锁定,并实现带超时的锁定 (class) [编辑]
定义于头文件
shared_mutex(C++17)
提供共享互斥设施 (class) [编辑]
shared_timed_mutex(C++14)
提供共享互斥设施,并实现带超时的锁定 (class) [编辑]
通用互斥量管理
定义于头文件
lock_guard(C++11)
实现严格的基于作用域的互斥量所有权包装器 (class template) [编辑]
scoped_lock(C++17)
用于多个互斥量的避免死锁的 RAII 包装器 (class template) [编辑]
unique_lock(C++11)
实现可移动的互斥量所有权包装器 (class template) [编辑]
shared_lock(C++14)
实现可移动的共享互斥量所有权包装器 (class template) [编辑]
defer_locktry_to_lockadopt_lockdefer_lock_ttry_to_lock_tadopt_lock_t(C++11)
用于指定锁定策略的标签(tag)[编辑]
通用锁定算法
try_lock(C++11)
尝试通过重复调用 try_lock 来获取互斥量的所有权 (function template) [编辑]
lock(C++11)
锁定指定的互斥量,如果任何互斥量不可用则阻塞 (function template) [编辑]
调用一次
once_flag(C++11)
帮助对象,以确保 call_once 仅调用函数一次 (class) [编辑]
call_once(C++11)
即使从多个线程调用,也仅调用函数一次 (function template) [编辑]
[编辑] 条件变量
条件变量是一种同步原语,允许多个线程相互通信。它允许一些线程等待(可能带有超时)来自另一个线程的通知,以便它们可以继续执行。条件变量始终与互斥量相关联。
定义于头文件
condition_variable(C++11)
提供与 std::unique_lock 关联的条件变量 (class) [编辑]
condition_variable_any(C++11)
提供与任何锁类型关联的条件变量 (class) [编辑]
notify_all_at_thread_exit(C++11)
计划在此线程完全完成时调用 notify_all (function) [编辑]
cv_status(C++11)
列出条件变量上定时等待的可能结果 (enum) [编辑]
[编辑] 信号量 (C++20 起)
信号量是一种轻量级的同步原语,用于约束对共享资源的并发访问。当两者都适用时,信号量可能比条件变量更有效率。
定义于头文件
counting_semaphore(C++20)
对非负资源计数建模的信号量 (类模板) [编辑]
binary_semaphore(C++20)
只有两种状态的信号量 (类型别名) [编辑]
[编辑] 闩锁和屏障 (C++20 起)
闩锁和屏障是线程协调机制,允许任意数量的线程阻塞,直到预期数量的线程到达。闩锁不能重复使用,而屏障可以重复使用。
定义于头文件
latch(C++20)
单次使用的线程屏障 (类) [编辑]
定义于头文件
barrier(C++20)
可重复使用的线程屏障 (类模板) [编辑]
[编辑] 期物
标准库提供了获取异步任务(即在单独线程中启动的函数)返回的值以及捕获其抛出的异常的工具。这些值在一个共享状态中进行传递,异步任务可以在其中写入其返回值或存储异常,而持有引用该共享状态的 std::future 或 std::shared_future 实例的其他线程可以检查、等待和以其他方式操作该共享状态。
定义于头文件
promise(C++11)
存储一个值以供异步检索 (类模板) [编辑]
packaged_task(C++11)
封装一个函数以存储其返回值,供异步检索 (类模板) [编辑]
future(C++11)
等待异步设置的值 (类模板) [编辑]
shared_future(C++11)
等待异步设置的值(可能被其他期物引用) (类模板) [编辑]
async(C++11)
异步运行一个函数(可能在新线程中),并返回一个将持有结果的 std::future (函数模板) [编辑]
launch(C++11)
指定 std::async 的启动策略 (枚举) [编辑]
future_status(C++11)
指定对 std::future 和 std::shared_future 执行的定时等待的结果 (枚举) [编辑]
期物错误
future_error(C++11)
报告与期物或承诺相关的错误 (类) [编辑]
future_category(C++11)
标识期物错误类别 (函数) [编辑]
future_errc(C++11)
标识期物错误代码 (枚举) [编辑]
[编辑] 安全回收 (C++26 起)
安全回收技术最常用于直接解决访问-删除竞争。
读取-复制-更新机制
定义于头文件
rcu_obj_base(C++26)
允许对象受 RCU 保护 (类模板) [编辑]
rcu_domain(C++26)
提供 RCU 保护区域 (类) [编辑]
rcu_default_domain(C++26)
返回对 std::rcu_domain 类型的静态持续时间对象的引用 (函数) [编辑]
rcu_synchronize(C++26)
阻塞直到 RCU 域上的保护区域解锁 (函数) [编辑]
rcu_barrier(C++26)
可能评估 RCU 域上的计划操作,并阻塞直到所有先前的评估完成 (函数) [编辑]
rcu_retire(C++26)
在 RCU 域上调度指定函数的评估,可能分配内存,并调用计划的评估 (函数模板) [编辑]
危害指针
定义于头文件
hazard_pointer_obj_base(C++26)
允许对象可进行危害保护 (类模板) [编辑]
hazard_pointer(C++26)
单写多读指针,在任何时间点最多只能由一个线程拥有 (类) [编辑]
make_hazard_pointer(C++26)
构造危害指针 (函数) [编辑]
[编辑] 参见
C 文档 关于 并发支持库