std::atomic

来自cppreference.com
< cpp‎ | atomic
 
 
 
 
定义于头文件 <atomic>
template< class T >
struct atomic;
(1) (C++11 起)
template<>
struct atomic<Integral>;
(2) (C++11 起)
template<>
struct atomic<bool>;
(3) (C++11 起)
template< class T >
struct atomic<T*>;
(4) (C++11 起)

每个std::atomic模板的实例化和完全特化定义一个原子类型。若一个线程写入原子对象,同时另一线程从它读取,则行为良好定义(数据竞争的细节见内存模型)。

而且,对原子对象的访问可以按std::memory_order所指定建立线程间同步,并排序非原子的内存访问。

std::atomic可以以任何可平凡复制TriviallyCopyable)的类型T实例化。std::atomic既不可复制亦不可移动。

标准库为下列类型提供std::atomic模板的特化:

1) 类型bool的完全特化,定义了其typedef名。它当做非特化的std::atomic<T>,不过它拥有标准布局、平凡默认构造函数、平凡析构函数,并支持聚合体初始化语法:

typedef名 全特化
std::atomic_bool std::atomic<bool>

2) 对于整数类型的全特化和typedef,如下:

typedef名 全特化
std::atomic_char std::atomic<char>
std::atomic_schar std::atomic<signed char>
std::atomic_uchar std::atomic<unsigned char>
std::atomic_short std::atomic<short>
std::atomic_ushort std::atomic<unsigned short>
std::atomic_int std::atomic<int>
std::atomic_uint std::atomic<unsigned int>
std::atomic_long std::atomic<long>
std::atomic_ulong std::atomic<unsigned long>
std::atomic_llong std::atomic<long long>
std::atomic_ullong std::atomic<unsigned long long>
std::atomic_char16_t std::atomic<char16_t>
std::atomic_char32_t std::atomic<char32_t>
std::atomic_wchar_t std::atomic<wchar_t>
std::atomic_int8_t std::atomic<std::int8_t>
std::atomic_uint8_t std::atomic<std::uint8_t>
std::atomic_int16_t std::atomic<std::int16_t>
std::atomic_uint16_t std::atomic<std::uint16_t>
std::atomic_int32_t std::atomic<std::int32_t>
std::atomic_uint32_t std::atomic<std::uint32_t>
std::atomic_int64_t std::atomic<std::int64_t>
std::atomic_uint64_t std::atomic<std::uint64_t>
std::atomic_int_least8_t std::atomic<std::int_least8_t>
std::atomic_uint_least8_t std::atomic<std::uint_least8_t>
std::atomic_int_least16_t std::atomic<std::int_least16_t>
std::atomic_uint_least16_t std::atomic<std::uint_least16_t>
std::atomic_int_least32_t std::atomic<std::int_least32_t>
std::atomic_uint_least32_t std::atomic<std::uint_least32_t>
std::atomic_int_least64_t std::atomic<std::int_least64_t>
std::atomic_uint_least64_t std::atomic<std::uint_least64_t>
std::atomic_int_fast8_t std::atomic<std::int_fast8_t>
std::atomic_uint_fast8_t std::atomic<std::uint_fast8_t>
std::atomic_int_fast16_t std::atomic<std::int_fast16_t>
std::atomic_uint_fast16_t std::atomic<std::uint_fast16_t>
std::atomic_int_fast32_t std::atomic<std::int_fast32_t>
std::atomic_uint_fast32_t std::atomic<std::uint_fast32_t>
std::atomic_int_fast64_t std::atomic<std::int_fast64_t>
std::atomic_uint_fast64_t std::atomic<std::uint_fast64_t>
std::atomic_intptr_t std::atomic<std::intptr_t>
std::atomic_uintptr_t std::atomic<std::uintptr_t>
std::atomic_size_t std::atomic<std::size_t>
std::atomic_ptrdiff_t std::atomic<std::ptrdiff_t>
std::atomic_intmax_t std::atomic<std::intmax_t>
std::atomic_uintmax_t std::atomic<std::uintmax_t>

注意: std::atomic_intN_tstd::atomic_uintN_t, std::atomic_intptr_t,以及atomic_uintptr_t各自当且仅当std::intN_t, std::uintN_tstd::intptr_t,以及std::uintptr_t被定义时得到定义。

这些特化拥有标准布局,平凡默认构造函数,以及平凡析构函数。它们支持聚合体初始化语法。在为所有原子类型提供的操作外,这些特化拥有额外的对整数类型的原子操作,例如fetch_addfetch_subfetch_andfetch_orfetch_xor

3) 对所有指针类型的偏特化std::atomic<T*>。这些特化拥有标准布局,平凡默认构造函数,以及平凡析构函数。它们支持聚合体初始化语法。在为所有原子类型提供的操作之外,这些特化额外支持与指针类型相符的算术运算,例如fetch_addfetch_sub

目录

[编辑] 成员函数

构建一个原子对象
原文:
constructs an atomic object
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
一个值存储到一个原子对象
原文:
stores a value into an atomic object
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
检查原子对象是否未加锁
(公开成员函数) [编辑]
(C++11)
以原子的原子对象的值替换的非原子的说法
原文:
atomically replaces the value of the atomic object with a non-atomic argument
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
(C++11)
原子获得的值的原子对象
原文:
atomically obtains the value of the atomic object
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
从一个原子对象加载的值
原文:
loads a value from an atomic object
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
(C++11)
原子取代原子对象的值,并获得先前保持的值
原文:
atomically replaced the value of the atomic object and obtains the value held previously
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
原子原子对象与非原子的参数的值的比较,并执行原子交换,如果等于或原子的负载如果不是
原文:
atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]

常量

[静态] (C++17)
指示该类型是否始终免锁
(公开静态成员常量) [编辑]

[编辑] 特化成员函数

(C++11)
原子级的参数的值存储在原子对象,并获得先前保存的值
原文:
atomically adds the argument to the value stored in the atomic object and obtains the value held previously
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
(C++11)
原子地减的说法,从原子对象中存储的值,并获得先前保存的值
原文:
atomically subtracts the argument from the value stored in the atomic object and obtains the value held previously
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
(C++11)
以原子方式执行按位“与”之间的参数的值的原子对象,并获得先前保存的值
原文:
atomically performs bitwise AND between the argument and the value of the atomic object and obtains the value held previously
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
(C++11)
原子地进行参数和原子对象的值的逐位或,并获取先前保有的值
(公开成员函数) [编辑]
(C++11)
以原子方式执行按位异或的原子对象之间的参数的值,并获得先前保存的值
原文:
atomically performs bitwise XOR between the argument and the value of the atomic object and obtains the value held previously
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
使原子值自增或自减一
(公开成员函数) [编辑]
加,减,或执行按位AND,OR,XOR的原子值
原文:
adds, subtracts, or performs bitwise AND, OR, XOR with the atomic value
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]

[编辑] 注意

存在等价于std::atomic所有成员函数的非成员函数模板。这些非成员函数可以附加地对非std::atomic特化的类型重载,但不能保证原子性。标准库中仅有的这种类型是std::shared_ptr<T>

[编辑] 缺陷报告

以下行为变化的缺陷报告可追溯至以前发布的 C++ 标准。

报告 适用于 已发布的行为 正确行为
LWG 2441 c++11 添加了(可选)定宽整数类型的特化

[编辑] 参阅

无锁的布尔原子类型
原文:
the lock-free boolean atomic type
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(类) [编辑]

[编辑] 参考

  • C++11 standard (ISO/IEC 14882:2011):
  • 29.5 Atomic types [atomics.types.generic]