std:: atomic_flag_wait, std:: atomic_flag_wait_explicit
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Определено в заголовочном файле
<atomic>
|
||
|
void
atomic_flag_wait
(
const
atomic_flag
*
object,
bool
old
)
noexcept
;
|
(1) | (начиная с C++20) |
|
void
atomic_flag_wait
(
const
volatile
atomic_flag
*
object,
bool old ) noexcept ; |
(2) | (начиная с C++20) |
|
void
atomic_flag_wait_explicit
(
const
atomic_flag
*
object,
bool old, std:: memory_order order ) noexcept ; |
(3) | (начиная с C++20) |
|
void
atomic_flag_wait_explicit
(
const
volatile
atomic_flag
*
object,
bool old, std:: memory_order order ) noexcept ; |
(4) | (начиная с C++20) |
Выполняет атомарные операции ожидания.
Сравнивает object - > test ( std:: memory_order_seq_cst ) или object - > test ( order ) с old , и если они равны, то блокируется до тех пор, пока * object не будет уведомлен с помощью std::atomic_flag::notify_one() или std::atomic_flag::notify_all() (или пока поток не будет разблокирован ложным образом). Это повторяется до тех пор, пока значения не окажутся неравными.
Эти функции гарантированно возвращают управление только при изменении значения, даже если базовая реализация разблокируется ложно.
Содержание |
Параметры
| object | - | указатель на атомарный флаг для проверки и ожидания |
| old | - | значение, которое проверяется на отсутствие в атомарном флаге |
| order | - | порядок синхронизации памяти |
Возвращаемое значение
(нет)
Примечания
Эта форма обнаружения изменений часто более эффективна, чем простое опрашивание или чистые спинлоки.
Из-за проблемы ABA , временные изменения с old на другое значение и обратно на old могут быть пропущены и не разблокировать.
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
(C++20)
|
уведомляет по крайней мере один поток, ожидающий атомарный объект
(публичная функция-член
std::atomic_flag
)
|
|
(C++20)
|
уведомляет все потоки, заблокированные в ожидании атомарного объекта
(публичная функция-член
std::atomic_flag
)
|
|
(C++20)
|
уведомляет поток, заблокированный в atomic_flag_wait
(функция) |
|
(C++20)
|
уведомляет все потоки, заблокированные в atomic_flag_wait
(функция) |