D.3.3. ATOMIC_VAR_INIT, макрос
Макрос ATOMIC_VAR_INIT позволяет инициализировать атомарную переменную конкретным значением.
Объявление
#define ATOMIC_VAR_INIT(value) см. описание
Макрос расширяется в последовательность лексем, которую можно использовать в выражении следующего вида для инициализации одного из стандартных атомарных типов указанным значением:
std::atomic<type> x = ATOMIC_VAR_INIT(val);
Указанное значение должно быть совместимо с неатомарным типом, соответствующим данной атомарной переменной, например:
std::atomic<int> i = ATOMIC_VAR_INIT(42);
std::string s;
std::atomic<std::string*> p = ATOMIC_VAR_INIT(&s);
Такая инициализация не атомарна, то есть любой доступ из другого потока к инициализируемой переменной в случае, когда инициализация не происходит-раньше этого доступа, приводит к гонке за данными и, следовательно, к неопределённому поведению.