<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> |
结构
名称 |
描述 |
---|---|
描述对存储值的基本操作的对象。 |
|
描述基本设置和清除 bool 标志的对象。 |
枚举
名称 |
描述 |
---|---|
提供符号名对于内存位置的同步操作。 这些操作会影响在一个线程上分配如何将变得可见在另一个。 |
函数
在下面的列表,请在 _explicit 不关闭具有相应的 _explicit语义,不同之处在于,它们具有 memory_order_seq_cst的隐式 memory_order 参数的函数。
名称 |
描述 |
---|---|
执行 基本比较和交换 操作。 |
|
执行 基本比较和交换 操作。 |
|
执行 弱基本比较和交换 操作。 |
|
执行 弱基本比较和交换 操作。 |
|
替换存储的值。 |
|
替换存储的值。 |
|
添加指定值到现有存储的值。 |
|
添加指定值到现有存储的值。 |
|
执行按位 XOR 运算在指定值和现有存储的值的 and。 |
|
执行按位 XOR 运算在指定值和现有存储的值的 and。 |
|
执行按位 XOR 运算在指定值和现有存储的值的 or。 |
|
执行按位 XOR 运算在指定值和现有存储的值的 or。 |
|
从现有存储的值减为指定的值。 |
|
从现有存储的值减为指定的值。 |
|
执行按位 XOR 运算在指定值和现有存储的值的 exclusive or。 |
|
执行按位 XOR 运算在指定值和现有存储的值的 exclusive or。 |
|
设置一个 atomic_flag 对象的标志传递给 false。 |
|
设置一个 atomic_flag 对象的标志传递给 false。 |
|
设置一个 atomic_flag 对象的标志传递给 true。 |
|
设置一个 atomic_flag 对象的标志传递给 true。 |
|
将 atomic 对象中存储的值。 |
|
指定在指定对象的基本操作是否为无锁。 |
|
基本检索值。 |
|
基本检索值。 |
|
作为在调用线程上建立范围之间的内存排序的要求具有通知处理程序中执行在同一个线程的 大小。 |
|
基本存储一个值。 |
|
基本存储一个值。 |
|
作为该内存排序的要求有关其他范围。 |
|
中断一个可能的依赖关系链。 |