ATOMIC_FLAG_INIT
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <atomic>
|
||
#define ATOMIC_FLAG_INIT /* определено реализацией */ |
(начиная с C++11) | |
Определяет инициализатор, который можно использовать для инициализации std::atomic_flag для очистки (false) состояния с помощью оператора std::atomic_flag v = ATOMIC_FLAG_INIT;. Не указано, может ли он использоваться с другими контекстами инициализации.
Если флаг имеет статическую длительность хранения, эта инициализация является статической.
|
Это единственный способ инициализировать std::atomic_flag определённым значением: значение, хранящееся после любой другой инициализации, не указано. |
(до C++20) |
|
Этот макрос больше не нужен, так как конструктор по умолчанию std::atomic_flag инициализирует его в чистое состояние. Он сохранён для совместимости с C. |
(начиная с C++20) |
Пример
Запустить этот код
#include <atomic>
std::atomic_flag static_flag = ATOMIC_FLAG_INIT; // статическая инициализация,
// гарантированно доступная при динамической инициализации статических объектов.
int main()
{
std::atomic_flag automatic_flag = ATOMIC_FLAG_INIT; // гарантированно работает
// std::atomic_flag another_flag(ATOMIC_FLAG_INIT); // не определено
}
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 3659 | C++20 | ATOMIC_FLAG_INIT устарел, но необходим в C на некоторых платформах
|
он не рекомендуется |
Смотрите также
(C++11) |
свободный от блокировок логический атомарный тип (класс) |
Документация C по ATOMIC_FLAG_INIT
| |