31 Atomic operations library [atomics]
#define ATOMIC_BOOL_LOCK_FREE unspecified
#define ATOMIC_CHAR_LOCK_FREE unspecified
#define ATOMIC_CHAR8_T_LOCK_FREE unspecified
#define ATOMIC_CHAR16_T_LOCK_FREE unspecified
#define ATOMIC_CHAR32_T_LOCK_FREE unspecified
#define ATOMIC_WCHAR_T_LOCK_FREE unspecified
#define ATOMIC_SHORT_LOCK_FREE unspecified
#define ATOMIC_INT_LOCK_FREE unspecified
#define ATOMIC_LONG_LOCK_FREE unspecified
#define ATOMIC_LLONG_LOCK_FREE unspecified
#define ATOMIC_POINTER_LOCK_FREE unspecified
macros indicate the lock-free property of the
corresponding atomic types, with the signed and unsigned variants grouped
The properties also apply to the corresponding (partial) specializations of the
A value of 0 indicates that the types are never
A value of 1 indicates that the types are sometimes lock-free.
value of 2 indicates that the types are always lock-free.
At least one signed integral specialization of the atomic
along with the specialization
for the corresponding unsigned type ([basic.fundamental]
is always lock-free.
This requirement is optional in freestanding implementations ([compliance]
— end note
In any given program execution, the
result of the lock-free query shall be consistent for all pointers of the same
Atomic operations that are not lock-free are considered to potentially
: Operations that are lock-free should also be address-free.
The implementation of these operations should not depend on any per-process state.
This restriction enables communication by memory that is
mapped into a process more than once and by memory that is shared between two
— end note