C++ 库 - <atomic>



简介

这些类型封装了一个值,其访问保证不会导致数据竞争,可用于在不同线程之间同步内存访问,原子库提供用于细粒度原子操作的组件,允许无锁并发编程。每个原子操作对于涉及同一对象的任何其他原子操作都是不可分割的。

原子类型

序号 成员类型及定义
1 atomic

原子类模板和针对 bool、整数和指针类型的特化

C 风格原子类型

以下是原子类型,也在此头文件中定义。

包含类型 原子类型 描述
bool atomic_bool
char atomic_char

用于基本整数类型的原子。

这些或者是相应`atomic`类模板完整特化的typedef,或者此类特化的基类。

signed char atomic_schar
unsigned char atomic_uchar
short atomic_short
unsigned short atomic_ushort
int atomic_int
unsigned int atomic_uint
long atomic_long
unsigned long atomic_ulong
long long atomic_llong
unsigned long long atomic_ullong
wchar_t atomic_wchar_t
char16_t atomic_char16_t
char32_t atomic_char32_t
intmax_t atomic_intmax_t

用于基于宽度的整数(在<cinttypes>中定义)的原子。

每个都是上述基本整数类型原子或具有扩展整数类型的`atomic`类模板完整特化的别名。

其中N是8、16、32、64或库支持的任何其他类型宽度。

uintmax_t atomic_uintmax_t
int_leastN_t atomic_int_leastN_t
uint_leastN_t atomic_uint_leastN_t
int_fastN_t atomic_int_fastN_t
uint_fastN_t atomic_uint_fastN_t
intptr_t atomic_intptr_t
uintptr_t atomic_uintptr_t
size_t atomic_size_t
ptrdiff_t atomic_ptrdiff_t

原子类型的操作

&
序号 操作及定义
1 atomic_is_lock_free

用于检查原子类型的操作是否为无锁的

2 atomic_store & atomic_store_explicit

它自动将原子对象的value替换为非原子参数

3 atomic_load & atomic_load_explicit

它以原子方式获取存储在原子对象中的值

4 atomic_exchange & atomic_exchange_explicit

它以原子方式将原子对象的value替换为非原子参数,并返回原子的旧值

5 atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit

它以原子方式将原子对象的value与非原子参数进行比较,如果相等则执行原子交换,否则执行原子加载

6 atomic_fetch_add & atomic_fetch_add_explicit

它将非原子值添加到原子对象,并获取原子的前一个值

7 atomic_fetch_sub & atomic_fetch_sub_explicit

它从原子对象中减去非原子值,并获取原子的前一个值

8 atomic_fetch_and & atomic_fetch_and_explicit

它将原子对象替换为与非原子参数的逻辑 AND 的结果,并获取原子的前一个值

9 atomic_fetch_or & atomic_fetch_or_explicit

它将原子对象替换为与非原子参数的逻辑 OR 的结果,并获取原子的前一个值

10 atomic_fetch_xor & atomic_fetch_xor_explicit

它将原子对象替换为与非原子参数的逻辑 XOR 的结果,并获取原子的前一个值

标志类型和操作

序号 标志类型及定义
1 atomic_flag

无锁布尔原子类型

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

它将标志原子设置为 true 并返回其前一个值

3 atomic_flag_clear & atomic_flag_clear_explicit

它将标志的值原子设置为 false

广告