Namespaces
Variants

ATOMIC_VAR_INIT

From cppreference.net
Определено в заголовочном файле <stdatomic.h>
#define ATOMIC_VAR_INIT(value) /* unspecified */
(начиная с C11)
(устарело в C17)
(удалено в C23)

Раскрывается в выражение, которое может быть использовано для инициализации атомарной переменной того же типа, что и value .

Начальное значение атомарного объекта автоматической продолжительности хранения, которое не инициализировано явно, является неопределенным. Однако инициализация по умолчанию (нулевая) статических и thread-local переменных создает допустимое значение.

При инициализации атомарной переменной любой конкурентный доступ, даже через атомарную операцию, является состоянием гонки данных (это может произойти, если адрес немедленно передается в другой поток с помощью операции memory_order_relaxed ).

Содержание

Примечания

Этот макрос был частью раннего чернового проекта для атомарных типов C11. Он не требуется в C11, устарел в C17 и удален в C23.

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C.

DR Applied to Behavior as published Correct behavior
DR 485 C11 спецификация была избыточной и противоречила основному языку исправлено

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.17.2.1 Макрос ATOMIC_VAR_INIT (стр: 201)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.17.2.1 Макрос ATOMIC_VAR_INIT (стр: 274)

Смотрите также

инициализирует новый atomic_flag
(макроконстанта)
Документация C++ для ATOMIC_VAR_INIT