The std::atomic_address class provides an atomic
data type for pointer types, with a comprehensive set of operations.
Instances of std::atomic_address are not CopyConstructible
or CopyAssignable, as these operations cannot be performed as a single
atomic operation.
typedef struct atomic_address { atomic_address() = default; constexpr atomic_address(void*); bool operator=(void*) volatile; atomic_address(const atomic_address&) = delete; atomic_address& operator=( const atomic_address&) = delete; bool is_lock_free() const volatile; void store( void*,memory_order = memory_order_seq_cst) volatile; void* load( memory_order = memory_order_seq_cst) const volatile; void* exchange( void*,memory_order = memory_order_seq_cst) volatile; bool compare_exchange_strong( void* & old_value, void* new_value, memory_order order = memory_order_seq_cst) volatile; bool compare_exchange_strong( void* & old_value, void* new_value, memory_order success_order, memory_order failure_order) volatile; bool compare_exchange_weak( void* & old_value, void* new_value, memory_order order = memory_order_seq_cst) volatile; bool compare_exchange_weak( void* & old_value, void* new_value, memory_order success_order, memory_order failure_order) volatile; operator void*() const volatile; void* fetch_add( ptrdiff_t, memory_order = memory_order_seq_cst) volatile; void* fetch_sub( ptrdiff_t, memory_order = memory_order_seq_cst) volatile; void* operator+=(ptrdiff_t) volatile; void* operator-=(ptrdiff_t) volatile; } atomic_address; bool atomic_is_lock_free( volatile const atomic_address*); void atomic_init( volatile atomic_address*, void*); void* atomic_exchange( volatile atomic_address*, void*); void* atomic_exchange_explicit( volatile atomic_address*, void*, memory_order); void atomic_store( volatile atomic_address*, void*); void atomic_store_explicit( volatile atomic_address*, void*, memory_order); void* atomic_load( volatile const atomic_address*); void* atomic_load_explicit( volatile const atomic_address*, memory_order); bool atomic_compare_exchange_strong( volatile atomic_address*,void* * old_value, void* new_value); bool atomic_compare_exchange_strong_explicit( volatile atomic_address*,void* * old_value, void* new_value, memory_order success_order, memory_order failure_order); bool atomic_compare_exchange_weak( volatile atomic_address*,void* * old_value, void* new_value); bool atomic_compare_exchange_weak_explicit( volatile atomic_address*,void* * old_value, void* new_value, memory_order success_order, memory_order failure_order); void* atomic_fetch_add( volatile atomic_address*, ptrdiff_t); void* atomic_fetch_add_explicit( volatile atomic_address*, ptrdiff_t, memory_order); void* atomic_fetch_sub( volatile atomic_address*, ptrdiff_t); void* atomic_fetch_sub_explicit( volatile atomic_address*, ptrdiff_t, memory_order);
Header
#include <atomic>