Spec-Zone.ru › C++

std::atomic_ref<T>::wait

void wait( T old, std::memory_order order =
                      std::memory_order::seq_cst ) const noexcept;
(1) (since C++20)
void wait( T old, std::memory_order order =
                      std::memory_order::seq_cst ) const volatile noexcept;
(2) (since C++20)

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

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

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

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

Параметры

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

Возвращаемое значение

(нет)

Примечания

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

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

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

Пример

См. также

notify_one
(C++20)
уведомляет как минимум один ожидающий поток об атомном объекте
(публичный член-функция)
notify_all
(C++20)
уведомляет все заблокированные потоки, ожидающие атомного объекта
(публичный член-функция)
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/w/cpp/atomic/atomic_ref/wait

Spec-Zone.ru

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