32 Atomic operations library [atomics]

32.5 Lock-free property [atomics.lockfree]

#define ATOMIC_BOOL_LOCK_FREE unspecified
#define ATOMIC_CHAR_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

В ATOMIC_­..._­LOCK_­FREE макросы указывают свойство блокировки свободной от соответствующих атомарных типов, с подписанные и неподписанные варианты сгруппированы вместе. Свойства также применяются к соответствующим (частичным) специализациям atomic шаблона. Значение 0 указывает, что типы никогда не освобождаются от блокировки. Значение 1 указывает, что типы иногда не блокируются. Значение 2 указывает, что типы всегда свободны от блокировок.

Функция atomic_­is_­lock_­free указывает, свободен ли объект от блокировки. При выполнении любой данной программы результат запроса без блокировки должен быть согласован для всех указателей одного и того же типа.

Атомарные операции, которые не являются свободными от блокировок, считаются потенциально block ([intro.progress]).

[ Note: Операции без блокировки также должны быть безадресными. То есть атомарные операции в одном и том же месте памяти через два разных адреса будут взаимодействовать атомарно. Реализация не должна зависеть от состояния каждого процесса. Это ограничение позволяет осуществлять обмен данными с помощью памяти, которая отображается на процесс более одного раза, и с помощью памяти, которая используется совместно двумя процессами. ] end note