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 могут быть пропущены, и разблокировка не произойдёт.
Пример
См. также
|
(C++20) |
уведомляет по меньшей мере один ожидающий поток об атомарном объекте (публичный член-функция) |
|
(C++20) |
уведомляет все заблокированные ожидающие потоки об атомарном объекте (публичный член-функция) |
|
(C++20) |
уведомляет заблокированный поток в atomic_flag_wait (функция) |
|
(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