Пространства имён
Варианты
Действия

std::atomic_flag::wait

Материал из cppreference.com
< cpp‎ | atomic‎ | atomic flag
 
 
Библиотека атомарных операций
 
 
void wait( bool old, std::memory_order order =
                         std::memory_order::seq_cst ) const noexcept;
(1) (начиная с C++20)
void wait( bool old, std::memory_order order =
                         std::memory_order::seq_cst ) const volatile noexcept;
(2) (начиная с C++20)

Выполняет атомарные операции ожидания. Ведёт себя так, как если бы неоднократно выполнялись следующие шаги:

  • Сравнивает this->test(order) с old.
    • Если они равны, то блокируется до тех пор, пока *this не будет уведомлён notify_one() или notify_all(), или пока поток не будет ложно разблокирован.
    • Иначе, возвращается.

Эти функции гарантированно возвращаются, только если значение изменилось, даже если базовая реализация разблокируется ложно.

Если order является одним из std::memory_order::release и std::memory_order::acq_rel, поведение не определено.

Содержание

[править] Параметры

old значение для проверки atomic_flag, которое объект больше не содержит
order порядок синхронизации памяти для этой операции

[править] Возвращаемое значение

(нет)

[править] Примечание

Эта форма обнаружения изменений часто более эффективна, чем простой опрос или чистые спин-блокировки.

Из-за проблемы ABA, временные изменения из old в другое значение и обратно в old могут быть пропущены, а разблокировки не произойдёт.


[править] Пример

[править] Смотрите также

уведомляет хотя бы один поток, ожидающий атомарный объект
(public функция-элемент) [править]
уведомляет все потоки, заблокированные в ожидании атомарного объекта
(public функция-элемент) [править]
уведомляет поток, заблокированный в atomic_flag_wait
(функция) [править]
уведомляет все потоки, заблокированные в atomic_flag_wait
(функция) [править]