std::atomic_flag::wait
Материал из cppreference.com
void wait( bool old, std::memory_order order = {{#pad:|4}} std::memory_order::seq_cst ) const noexcept; |
(1) | (начиная с C++20) |
void wait( bool old, std::memory_order order = {{#pad:|4}} std::memory_order::seq_cst ) const volatile noexcept; |
(2) | (начиная с 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 могут быть пропущены, а разблокировки не произойдёт.
Пример
| Этот раздел не завершён Причина: нет примера |
Смотрите также
| уведомляет хотя бы один поток, ожидающий атомарный объект (public функция-элемент) | |
| уведомляет все потоки, заблокированные в ожидании атомарного объекта (public функция-элемент) | |
(C++20) |
уведомляет поток, заблокированный в atomic_flag_wait (функция) |
(C++20) |
уведомляет все потоки, заблокированные в atomic_flag_wait (функция) |