std::atomic_flag::wait
Материал из cppreference.com
< cpp | atomic | atomic flag
void wait( bool old, std::memory_order order = std::memory_order::seq_cst ) const noexcept; |
(1) | (начиная с C++20) |
void wait( bool old, std::memory_order order = 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 (функция) |