<atomic>

定义类模板类,并且使用创建支持原子操作的类型。

#include <atomic>

备注

备注

使用 /clr/clr:pure中,在编译代码,此头阻止。

原子操作具有帮助您使用多线程正确操作对象,而无需使用锁 mutex 的两个主要属性。

  • 由于操作是原子的不可分割,同一对象的第二个原子操作从不同的线程可以将第原子操作前后仅获取对象的状态。

  • 根据其参数,memory_order 原子操作在同一线程上建立对其他原子操作的效果可见性的要求。 因此,它不允许违反的顺序要求优化的。

在一些平台上,可以有效地实现这些类型的原子操作可能是不可行的,而无需使用 mutex 锁。 则对该类型使用的原子操作不锁定,原子类型是 无锁。

atomic_flag 类提供保存 bool 标志的更小的原子类型。 其操作始终是无锁。

类模板 atomic<Ty> 存储其参数类型 Ty 对象并提供对该的原子访问存储的值。 可以实例化该使用 memcmp,可以将使用 memcpy 以及相等的任何测试类型。 具体来说,可以用于满足这些要求,并且在很多情况下,具有浮点类型的用户定义类型。

模板还有一组整型的专用化和指针的一部分专用化。 这些提供主要通过模板专用化不可用的附加操作。

指针专用化

atomic<Ty *> 部分专用化适用于任何指针类型。 对指针算法的方法。

整型专用化

atomic<integral> 专适用于所有整数类型。 这些提供主要通过模板不可用的附加操作。

每个 atomic<integral> 类型都有可以使用 if directive 中位于编译时的相应宏对该类型的操作是否是无锁。 如果宏的值为零,在类型的操作不是无锁。 如果值为 1,所以操作可能是空闲,锁定,并且需要一个运行时检查。 如果值为 2,所以操作是无锁。 可以使用函数 atomic_is_lock_free 确定运行时在类型的操作是否是无锁。

对于每整型,则管理该整数类型对象的相应一个原子类型。 每个 atomic_integral 类型都有同一组成员函数与 atomic<Ty> 对应的实例化,并且可以传递到任何非成员原子函数。

atomic_integral 类型

整型

atomic_is_lock_free

atomic_char

char

ATOMIC_CHAR_LOCK_FREE

atomic_schar

signed char

ATOMIC_CHAR_LOCK_FREE

atomic_uchar

unsigned char

ATOMIC_CHAR_LOCK_FREE

atomic_char16_t

char16_t

ATOMIC_CHAR16_T_LOCK_FREE

atomic_char32_t

char32_t

ATOMIC_CHAR32_T_LOCK_FREE

atomic_wchar_t

wchar_t

ATOMIC_WCHAR_T_LOCK_FREE

atomic_short

short

ATOMIC_SHORT_LOCK_FREE

atomic_ushort

unsigned short

ATOMIC_SHORT_LOCK_FREE

atomic_int

int

ATOMIC_INT_LOCK_FREE

atomic_uint

unsigned int

ATOMIC_INT_LOCK_FREE

atomic_long

long

ATOMIC_LONG_LOCK_FREE

atomic_ulong

unsigned long

ATOMIC_LONG_LOCK_FREE

atomic_llong

long long

ATOMIC_LLONG_LOCK_FREE

atomic_ullong

unsigned long long

ATOMIC_LLONG_LOCK_FREE

Typedef 名称以原子模板的专用化在标题 <inttypes.h 定义的一些存在的类型。>

原子类型

Typedef 名称

atomic_int8_t

atomic<int8_t>

atomic_uint8_t

atomic<uint8_t>

atomic_int16_t

atomic<int16_t>

atomic_uint16_t

atomic<uint16_t>

atomic_int32_t

atomic<int32_t>

atomic_uint32_t

atomic<uint32_t>

atomic_int64_t

atomic<int64_t>

atomic_uint64_t

atomic<uint64_t>

atomic_int_least8_t

atomic<int_least8_t>

atomic_uint_least8_t

atomic<uint_least8_t>

atomic_int_least16_t

atomic<int_least16_t>

atomic_uint_least16_t

atomic<uint_least16_t>

atomic_int_least32_t

atomic<int_least32_t>

atomic_uint_least32_t

atomic<uint_least32_t>

atomic_int_least64_t

atomic<int_least64_t>

atomic_uint_least64_t

atomic<uint_least64_t>

atomic_int_fast8_t

atomic<int_fast8_t>

atomic_uint_fast8_t

atomic<uint_fast8_t>

atomic_int_fast16_t

atomic<int_fast16_t>

atomic_uint_fast16_

atomic<uint_fast16_t>

atomic_int_fast32_t

atomic<int_fast32_t>

atomic_uint_fast32_t

atomic<uint_fast32_t>

atomic_int_fast64_t

atomic<int_fast64_t>

atomic_uint_fast64_t

atomic<uint_fast64_t>

atomic_intptr_t

atomic<intptr_t>

atomic_uintptr_t

atomic<uintptr_t>

atomic_size_t

atomic<size_t>

atomic_ptrdiff_t

atomic<ptrdiff_t>

atomic_intmax_t

atomic<intmax_t>

atomic_uintmax_t

atomic<uintmax_t>

结构

Name

说明

atomic 结构

描述对存储的值的原子操作的对象。

atomic_flag 结构

描述基本设置和清除 bool 标志的对象。

枚举

Name

说明

memory_order 枚举

提供用于内存位置的同步操作的符号名。 这些操作会影响一个线程上的分配如何在另一个中变得可见。

函数

在下面列表,在 _explicit 结束的函数不具有相应 _explicit的语义,但它们具有 memory_order_seq_cst的隐式 memory_order 参数。

Name

说明

atomic_compare_exchange_strong 函数

执行基本比较和交换操作。

atomic_compare_exchange_strong_explicit 函数

执行基本比较和交换操作。

atomic_compare_exchange_weak 函数

执行“原子比较和交换” 操作。

atomic_compare_exchange_weak_explicit 函数

执行“原子比较和交换” 操作。

atomic_exchange 函数

替换现有存储的值。

atomic_exchange_explicit 函数

替换现有存储的值。

atomic_fetch_add 函数

添加一个值到现有的存储的值。

atomic_fetch_add_explicit 函数

添加一个值到现有的存储的值。

atomic_fetch_and 函数

按位对某个指定与现有存储的值的 and。

atomic_fetch_and_explicit 函数

按位对某个指定与现有存储的值的 and。

atomic_fetch_or 函数

按位对某个指定与现有存储的值的 or。

atomic_fetch_or_explicit 函数

按位对某个指定与现有存储的值的 or。

atomic_fetch_sub 函数

从现有存储的值减去一个值。

atomic_fetch_sub_explicit 函数

从现有存储的值减去一个值。

atomic_fetch_xor 函数

按位对某个指定与现有存储的值的 exclusive or。

atomic_fetch_xor_explicit 函数

按位对某个指定与现有存储的值的 exclusive or。

atomic_flag_clear 函数

将一个对象的 atomic_flag 标志设置为 false。

atomic_flag_clear_explicit 函数

将一个对象的 atomic_flag 标志设置为 false。

atomic_flag_test_and_set 函数

将一个对象的 atomic_flag 标志设置为 true。

atomic_flag_test_and_set_explicit 函数

将一个对象的 atomic_flag 标志设置为 true。

atomic_init 函数

设置 atomic 对象中存储的值。

atomic_is_lock_free 函数

指定在指定对象的原子操作是无锁。

atomic_load 函数

基本检索值。

atomic_load_explicit 函数

基本检索值。

atomic_signal_fence 函数

是在调用线程上建立范围之间的排序。内存要求有通知处理程序将执行在同一线程的 大小。

atomic_store 函数

基本存储值。

atomic_store_explicit 函数

基本存储值。

atomic_thread_fence 函数

为建立顺序要求的内存与其他范围的 大小。

kill_dependency 函数

中断一可能的依赖关系,这些依赖关系链。

请参见

参考

标准模板库

其他资源

C++ 标准库头文件