Spec-Zone.ru › C++

std::atomic_ref<T>::wait

void wait( value_type old, std::memory_order order =
                               std::memory_order_seq_cst ) const noexcept;
(constexpr с C++26)

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

  • Сравнивает представление значения this->load(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_ref больше не содержит
order - ограничения на порядок памяти, которые необходимо соблюдать

Примечания

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

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

Сравнение выполняется побитово (аналогично std::memcmp); оператор сравнения не используется. Биты заполнения, которые никогда не участвуют в представлении значения объекта, игнорируются.

Пример

См. также

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

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

Spec-Zone.ru

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