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

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

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 相同 (function macro) [编辑]

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

[编辑] 互斥

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

定义于头文件

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 文档 关于 并发支持库

相关手记

Oracle数据库的应用场景有哪些?
大众宝来反光镜多少钱,宝来反光镜怎么更换
男人多久打一次飞机算正常