D.5.9. Класс std::once_flag

Экземпляры класса std::once_flag используются совместно с шаблоном функции std::call_once для гарантии того, что некая функция будет вызвала ровно один раз, даже если ее могут вызывать одновременно несколько потоков.

Экземпляры std::once_flag не удовлетворяют требованиям концепций CopyConstructible, CopyAssignable, MoveConstructible и MoveAssignable.

Определение класса

struct once_flag {

 constexpr once_flag() noexcept;

 once_flag(once_flag const&) = delete;

 once_flag& operator=(once_flag const&) = delete;

};

STD::ONCE_FLAG , КОНСТРУКТОР ПО УМОЛЧАНИЮ

Создает объект std::once_flag в состоянии, обозначающем, что ассоциированная функция еще не вызывалась.

Объявление

constexpr once_flag() noexcept;

Результат

Конструирует новый экземпляр std::once_flag, оставляя его в состоянии, означающем, что ассоциированная функция еще не вызывалась. Поскольку в конструкторе присутствует квалификатор constexpr, то экземпляр со статическим временем жизни конструируется на этапе статической инициализации, что предотвращает состояние гонки и зависимость от порядка инициализации.