std::atomic_flag:: wait
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(C++20)
|
||||
|
atomic_flag::wait
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
|
void
wait
(
bool
old,
std::
memory_order
order
=
std:: memory_order_seq_cst ) const noexcept ; |
(1) |
(начиная с C++20)
(constexpr начиная с C++26) |
|
void
wait
(
bool
old,
std::
memory_order
order
=
|
(2) | (начиная с C++20) |
Выполняет атомарные операции ожидания. Ведут себя так, как будто многократно выполняются следующие шаги:
-
Сравните
this
-
>
test
(
order
)
с
old
.
- Если они равны, то блокируется до тех пор, пока * this не будет уведомлен с помощью notify_one() или notify_all() , или пока поток не будет разблокирован спонтанно.
- В противном случае возвращает управление.
Эти функции гарантированно возвращают управление только при изменении значения, даже если базовая реализация разблокируется ложно.
Если order не является std:: memory_order_relaxed , std:: memory_order_consume , std:: memory_order_acquire или std:: memory_order_seq_cst , поведение не определено.
Содержание |
Параметры
| old | - |
значение, которое объект
atomic_flag
больше не содержит
|
| order | - | ограничения порядка памяти для применения |
Примечания
Эта форма обнаружения изменений часто более эффективна, чем простое опрашивание или чистые спинлоки.
Из-за проблемы ABA , временные изменения с old на другое значение и обратно на old могут быть пропущены и не разблокировать.
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
(C++20)
|
уведомляет по крайней мере один поток, ожидающий атомарный объект
(публичная функция-член) |
|
(C++20)
|
уведомляет все потоки, заблокированные в ожидании атомарного объекта
(публичная функция-член) |
|
(C++20)
|
уведомляет поток, заблокированный в atomic_flag_wait
(функция) |
|
(C++20)
|
уведомляет все потоки, заблокированные в atomic_flag_wait
(функция) |