The std::atomic_itype class
provides an atomic integral data type for each fundamental integer type,
with a comprehensive set of operations.
The following std::atomic_itype
classes are provided, with the corresponding integral-types:
Table 1. Atomic types and their corresponding built-in integral types
|
|
integral-type |
|---|---|
|
|
char |
|
|
signed char |
|
|
unsigned char |
|
|
short |
|
|
unsigned short |
|
|
int |
|
|
unsigned int |
|
|
long |
|
|
unsigned long |
|
|
long long |
|
|
unsigned long long |
|
|
wchar_t |
Microsoft Visual Studio 2008 specific:
long long
is not available under that name with this compiler. The 64-bit integral
type is __int64, with the
corresponding unsigned type being unsigned
__int64.
Instances of std::atomic_itype
are not CopyConstructible or CopyAssignable, as these operations cannot
be performed as a single atomic operation.
typedef struct atomic_itype { atomic_itype() = default; constexpr atomic_itype(integral-type); bool operator=(integral-type) volatile; atomic_itype(const atomic_itype&) = delete; atomic_itype& operator=(const atomic_itype&) = delete; bool is_lock_free() const volatile; void store(integral-type,memory_order = memory_order_seq_cst) volatile; integral-type load(memory_order = memory_order_seq_cst) const volatile; integral-type exchange(integral-type,memory_order = memory_order_seq_cst) volatile; bool compare_exchange_strong(integral-type & old_value, integral-type new_value, memory_order order = memory_order_seq_cst) volatile; bool compare_exchange_strong(integral-type & old_value, integral-type new_value, memory_order success_order, memory_order failure_order) volatile; bool compare_exchange_weak(integral-type & old_value, integral-type new_value, memory_order order = memory_order_seq_cst) volatile; bool compare_exchange_weak(integral-type & old_value, integral-type new_value, memory_order success_order, memory_order failure_order) volatile; operator integral-type() const volatile; integral-type fetch_add(integral-type,memory_order = memory_order_seq_cst) volatile; integral-type fetch_sub(integral-type,memory_order = memory_order_seq_cst) volatile; integral-type fetch_and(integral-type,memory_order = memory_order_seq_cst) volatile; integral-type fetch_or(integral-type,memory_order = memory_order_seq_cst) volatile; integral-type fetch_xor(integral-type,memory_order = memory_order_seq_cst) volatile; integral-type operator++() volatile; integral-type operator++(int) volatile; integral-type operator--() volatile; integral-type operator--(int) volatile; integral-type operator+=(integral-type) volatile; integral-type operator-=(integral-type) volatile; integral-type operator&=(integral-type) volatile; integral-type operator|=(integral-type) volatile; integral-type operator^=(integral-type) volatile; } atomic_itype; bool atomic_is_lock_free(volatile const atomic_itype*); integral-type atomic_exchange(volatile atomic_itype*, integral-type); integral-type atomic_exchange_explicit(volatile atomic_itype*, integral-type, memory_order); void atomic_store(volatile atomic_itype*, integral-type); void atomic_store_explicit(volatile atomic_itype*, integral-type, memory_order); integral-type atomic_load(volatile const atomic_itype*); integral-type atomic_load_explicit(volatile const atomic_itype*, memory_order); bool atomic_compare_exchange_strong(volatile atomic_itype*,integral-type * old_value, integral-type new_value); bool atomic_compare_exchange_strong_explicit(volatile atomic_itype*,integral-type * old_value, integral-type new_value, memory_order success_order, memory_order failure_order); bool atomic_compare_exchange_weak(volatile atomic_itype*,integral-type * old_value, integral-type new_value); bool atomic_compare_exchange_weak_explicit(volatile atomic_itype*,integral-type * old_value, integral-type new_value, memory_order success_order, memory_order failure_order); integral-type atomic_fetch_add(volatile atomic_itype*, integral-type); integral-type atomic_fetch_add_explicit(volatile atomic_itype*, integral-type, memory_order); integral-type atomic_fetch_sub(volatile atomic_itype*, integral-type); integral-type atomic_fetch_sub_explicit(volatile atomic_itype*, integral-type, memory_order); integral-type atomic_fetch_and(volatile atomic_itype*, integral-type); integral-type atomic_fetch_and_explicit(volatile atomic_itype*, integral-type, memory_order); integral-type atomic_fetch_or(volatile atomic_itype*, integral-type); integral-type atomic_fetch_or_explicit(volatile atomic_itype*, integral-type, memory_order); integral-type atomic_fetch_xor(volatile atomic_itype*, integral-type); integral-type atomic_fetch_xor_explicit(volatile atomic_itype*, integral-type, memory_order);
Header
#include <atomic>