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