Atomic types
From cppreference.com
Syntax
_Atomic ( type-name )
|
(1) | (since C11) | |||||||
_Atomic type-name
|
(2) | (since C11) | |||||||
1) Use as a type specifier; this designates a new atomic type
2) Use as a type qualifier; this designates the atomic version of type-name. In this role, it may be mixed with
const, volatile, and restrict, although unlike other qualifiers, the atomic version of type-name may have a different size, alignment, and object representation.| type-name | - | any type other than array or function. For (1), type-name also cannot be atomic or cvr-qualified |
The header <stdatomic.h> defines many convenience type aliases, from atomic_bool to atomic_uintmax_t, which simplify the use of this keyword with built-in and library types.
_Atomic const int* p1; // p is a pointer to an atomic const int
const atomic_int* p2; // same
const _Atomic(int)* p3; // same
If the macro constant __STDC_NO_ATOMICS__ is defined by the compiler, the keyword _Atomic is not provided.
Explanation
Objects of atomic types are the only objects that are free from