Namespaces
Variants

ATOMIC_FLAG_INIT

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
ATOMIC_FLAG_INIT
(C++11)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
Определено в заголовочном файле <atomic>
#define ATOMIC_FLAG_INIT /* определяется реализацией */
(начиная с C++11)

Определяет инициализатор, который может использоваться для инициализации std::atomic_flag в очищенное (false) состояние в форме std:: atomic_flag v = ATOMIC_FLAG_INIT ; . Не определено, может ли он использоваться в других контекстах инициализации.

Если флаг имеет complete object с static storage duration , это initialization is static .

Это единственный способ инициализировать std::atomic_flag в определённое состояние: значение после любой другой инициализации не определено.

(until C++20)

Этот макрос больше не нужен, поскольку конструктор по умолчанию std::atomic_flag инициализирует его в очищенное состояние. Он сохранён для совместимости с C.

(since 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++.

DR Applied to Behavior as published Correct behavior
LWG 2159 C++11 было неясно, может ли ATOMIC_FLAG_INIT
использоваться в других контекстах инициализации
другие варианты использования
не гарантируются
LWG 3659 C++20 ATOMIC_FLAG_INIT был устаревшим, но необходим в C на некоторых платформах он восстановлен из устаревшего состояния

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

безблокировочный булевый атомарный тип
(класс)
Документация C для ATOMIC_FLAG_INIT