定义于头文件
template< class T > struct atomic; | (1) | (C++11 起) |
template< class U > struct atomic; | (2) | (C++11 起) |
template | (3) | (C++20 起) |
template | (4) | (C++20 起) |
每个 std::atomic
模板的实例化和全特化定义一个原子类型。若一个线程写入原子对象,同时另一线程从它读取,则行为良好定义(数据竞争的细节见内存模型)。
另外,对原子对象的访问可以建立线程间同步,并按 std::memory_order 所对非原子内存访问定序。
std::atomic
既不可复制亦不可移动。
初等模板
初等 std::atomic
模板可用任何满足 可复制构造 (CopyConstructible) 及 可复制赋值 (CopyAssignable) 的 可平凡复制 (TriviallyCopyable) 类型 T
特化。若下列任何值为 false
则程序为病式:
std::atomic
部分特化
标准库为下列类型提供 std::atomic
模板的特化,它们拥有初等模板所不拥有的额外属性:
2) 对所有指针类型的部分特化 std::atomic 。这些特化拥有标准布局、平凡默认构造函数和平凡析构函数。除了为所有原子类型提供的操作,这些特化额外支持适合指针类型的原子算术运算,例如 fetch_add
、 fetch_sub
。
3-4) 为 std::shared_ptr 和 std::weak_ptr 提供部分特化 std::atomic 细节见 std::atomic | (C++20 起) |
对整数类型的特化
以下列整数类型之一实例化时, std::atomic
提供适合于整数类型的额外原子操作,例如 fetch_add
、 fetch_sub
、 fetch_and
、 fetch_or
、 fetch_xor
:
另外,结果的 std::atomic<Integral>
特化拥有标准布局、平凡默认构造函数和平凡析构函数。定义有符号整数算术为使用补码;无未定义结果。
对浮点类型的特化 以浮点类型 float 、 double 和 long double 之一实例化时, 另外,结果的 无操作导致未定义行为,即使结果不能以浮点类型表示。有效的浮点环境可能不同于调用方线程的浮点环境。 | (C++20 起) |
为 bool 和所有上面列出的整数类型提供如下类型别名:
类型别名 | 定义 |
std::atomic_bool | std::atomic |
std::atomic_char | std::atomic |
std::atomic_schar | std::atomic |
std::atomic_uchar | std::atomic |
std::atomic_short | std::atomic |
std::atomic_ushort | std::atomic |
std::atomic_int | std::atomic |
std::atomic_uint | std::atomic |
std::atomic_long | std::atomic |
std::atomic_ulong | std::atomic |
std::atomic_llong | std::atomic |
std::atomic_ullong | std::atomic |
std::atomic_char8_t | std::atomic |
std::atomic_char16_t | std::atomic |
std::atomic_char32_t | std::atomic |
std::atomic_wchar_t | std::atomic |
std::atomic_int8_t | std::atomic |
std::atomic_uint8_t | std::atomic |
std::atomic_int16_t | std::atomic |
std::atomic_uint16_t | std::atomic |
std::atomic_int32_t | std::atomic |
std::atomic_uint32_t | std::atomic |
std::atomic_int64_t | std::atomic |
std::atomic_uint64_t | std::atomic |
std::atomic_int_least8_t | std::atomic |
std::atomic_uint_least8_t | std::atomic |
std::atomic_int_least16_t | std::atomic |
std::atomic_uint_least16_t | std::atomic |
std::atomic_int_least32_t | std::atomic |
std::atomic_uint_least32_t | std::atomic |
std::atomic_int_least64_t | std::atomic |
std::atomic_uint_least64_t | std::atomic |
std::atomic_int_fast8_t | std::atomic |
std::atomic_uint_fast8_t | std::atomic |
std::atomic_int_fast16_t | std::atomic |
std::atomic_uint_fast16_t | std::atomic |
std::atomic_int_fast32_t | std::atomic |
std::atomic_uint_fast32_t | std::atomic |
std::atomic_int_fast64_t | std::atomic |
std::atomic_uint_fast64_t | std::atomic |
std::atomic_intptr_t | std::atomic |
std::atomic_uintptr_t | std::atomic |
std::atomic_size_t | std::atomic |
std::atomic_ptrdiff_t | std::atomic |
std::atomic_intmax_t | std::atomic |
std::atomic_uintmax_t | std::atomic |
注意: std::atomic_intN_t
、 std::atomic_uintN_t
、 std::atomic_intptr_t
及 atomic_uintptr_t
分别若且唯若定义了 std::intN_t
、 std::uintN_t
、 std::intptr_t
及 std::uintptr_t
才有定义。
提供额外的特殊用途类型别名:
| (C++20 起) |
成员类型 | 定义 |
value_type | T (无论是否特化) |
difference_type | value_type (仅对 atomic<Integral> 和 atomic<Floating> (C++20 起) 特化)std::ptrdiff_t (仅对 atomic 特化) |
difference_type
不在初等 atomic
模板中,或不在对 std::shared_ptr 和 std::weak_ptr 的部分特化中定义。