Namespaces
Variants

ATOMIC_VAR_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)
ATOMIC_VAR_INIT
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
Определено в заголовочном файле <atomic>
#define ATOMIC_VAR_INIT(value) /* определяется реализацией */
(начиная с C++11)
(устарело в C++20)

Раскрывается в выражение, которое может быть использовано для инициализации объекта std::atomic , который может быть инициализирован из value . Если атомарный объект имеет статическую продолжительность хранения, эта инициализация является постоянной инициализацией .

Примечания

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

Этот макрос предоставлен в первую очередь для совместимости с C; он ведёт себя так же, как конструктор std::atomic .

Пример

#include <atomic>
#include <iostream>
int main()
{
    std::atomic<int> a = ATOMIC_VAR_INIT(1);
    // std::atomic<int> a(1);   // C++-only alternative
    std::cout << "Initialized std::atomic<int> as: " << a << '\n';
}

Вывод:

Initialized std::atomic<int> as: 1

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

(C++11) (deprecated in C++20)
неатомарная инициализация атомарного объекта, созданного по умолчанию
(шаблон функции)
создаёт атомарный объект
(публичная функция-член std::atomic<T> )
Документация C для ATOMIC_VAR_INIT