C++ Library - <atomic>



Introduction

These are types that encapsulate a value whose access is guaranteed to not cause data races and can be used to synchronize memory accesses among different threads and he atomic library provides components for fine-grained atomic operations allowing for lockless concurrent programming. Each atomic operation is indivisible with regards to any other atomic operation that involves the same object.

Atomic type

Sr.No. Member types & Definition
1 atomic

Atomic class template and specializations for bool, integral, and pointer types

C-style atomic types

The following are atomic types and also defined in this header.

contained type atomic type description
bool atomic_bool
char atomic_char

atomics for fundamental integral types.

These are either typedefs of the corresponding full specialization of the atomic class template or a base class of such specialization.

signed char atomic_schar
unsigned char atomic_uchar
short atomic_short
unsigned short atomic_ushort
int atomic_int
unsigned int atomic_uint
long atomic_long
unsigned long atomic_ulong
long long atomic_llong
unsigned long long atomic_ullong
wchar_t atomic_wchar_t
char16_t atomic_char16_t
char32_t atomic_char32_t
intmax_t atomic_intmax_t

atomics for width-based integrals (those defined in <cinttypes>).

Each of these is either an alias of one of the above atomics for fundamental integral types or of a full specialization of the atomic class template with an extended integral type.

Where N is one in 8, 16, 32, 64, or any other type width supported by the library.

uintmax_t atomic_uintmax_t
int_leastN_t atomic_int_leastN_t
uint_leastN_t atomic_uint_leastN_t
int_fastN_t atomic_int_fastN_t
uint_fastN_t atomic_uint_fastN_t
intptr_t atomic_intptr_t
uintptr_t atomic_uintptr_t
size_t atomic_size_t
ptrdiff_t atomic_ptrdiff_t

Operations on atomic types

&
Sr.No. Operations & Definition
1 atomic_is_lock_free

It is used to checks if the atomic type's operations are lock-free

2 atomic_store & atomic_store_explicit

It automically replaces the value of the atomic object with a non-atomic argument

3 atomic_load & atomic_load_explicit

It atomically obtains the value stored in an atomic object

4 atomic_exchange & atomic_exchange_explicit

It atomically replaces the value of the atomic object with non-atomic argument and returns the old value of the atomic

5 atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit

It atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not

6 atomic_fetch_add & atomic_fetch_add_explicit

It adds a non-atomic value to an atomic object and obtains the previous value of the atomic

7 atomic_fetch_sub & atomic_fetch_sub_explicit

It subtracts a non-atomic value from an atomic object and obtains the previous value of the atomic

8 atomic_fetch_and & atomic_fetch_and_explicit

It replaces the atomic object with the result of logical AND with a non-atomic argument and obtains the previous value of the atomic

9 atomic_fetch_or & atomic_fetch_or_explicit

It replaces the atomic object with the result of logical OR with a non-atomic argument and obtains the previous value of the atomic

10 atomic_fetch_xor & atomic_fetch_xor_explicit

It replaces the atomic object with the result of logical XOR with a non-atomic argument and obtains the previous value of the atomic

Flag type and operations

Sr.No. Flag type & Definition
1 atomic_flag

The lock-free boolean atomic type

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

It atomically sets the flag to true and returns its previous value

3 atomic_flag_clear & atomic_flag_clear_explicit

It atomically sets the value of the flag to false

Advertisements