Spec-Zone.ru › C

ATOMIC_VAR_INIT

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

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

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

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

Примечания

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

Отчёты об ошибках

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

DR Применён к Поведение при публикации Корректное поведение
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_INIT
(C11)
инициализирует новую atomic_flag
(макроконстанта)
Документация C++ для ATOMIC_VAR_INIT

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/atomic/ATOMIC_VAR_INIT

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API