Spec-Zone.ru › C++

std::atomic_flag::wait

void wait( bool old, std::memory_order order =
                         std::memory_order::seq_cst ) const noexcept;
(1) (since C++20)
void wait( bool old, std::memory_order order =
                         std::memory_order::seq_cst ) const volatile noexcept;
(2) (since 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 могут быть пропущены, и разблокировка не произойдёт.

Пример

См. также

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/w/cpp/atomic/atomic_flag/wait

Spec-Zone.ru

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