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)
См. также
|
(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