#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