Spec-Zone.ru › C++

std::atomic_flag::wait

void wait( bool old, std::memory_order order =
                         std::memory_order_seq_cst ) const noexcept;
(1) (начиная с C++20)
(constexpr начиная с C++26)
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_relaxed, std::memory_order_consume, std::memory_order_acquire или std::memory_order_seq_cst, поведение не определено.

Параметры

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

Примечания

Такой способ обнаружения изменений зачастую эффективнее простого опроса или использования исключительно спин-блокировок.

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

Пример

См. также

notify_one
(C++20)
уведомляет как минимум один поток, ожидающий атомарный объект
(открытая функция-член)
notify_all
(C++20)
уведомляет все потоки, заблокированные в ожидании атомарного объекта
(открытая функция-член)
atomic_flag_notify_one
(C++20)
уведомляет поток, заблокированный в atomic_flag_wait
(функция)
atomic_flag_notify_all
(C++20)
уведомляет все потоки, заблокированные в atomic_flag_wait
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/atomic/atomic_flag/wait

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API