33 Thread support library [thread]

33.4 Mutual exclusion [thread.mutex]

33.4.6 Call once [thread.once]

33.4.6.1 Struct once_­flag [thread.once.onceflag]

namespace std {
  struct once_flag {
    constexpr once_flag() noexcept;

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

Класс once_­flag представляет собой непрозрачную структуру данных, которая call_­once используется для инициализации данных, не вызывая гонки данных или взаимоблокировки.

constexpr once_flag() noexcept;

Effects: Создает объект типа once_­flag.

Synchronization: Строительство once_­flag объекта не синхронизировано.

Postconditions: Внутреннее состояние объекта устанавливается таким образом, чтобы указать при вызове call_­once объекта в качестве начального аргумента, что функция не была вызвана.