Namespaces
Variants

std:: atomic_flag_wait, std:: atomic_flag_wait_explicit

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
atomic_flag_wait atomic_flag_wait_explicit
(C++20) (C++20)
Определено в заголовочном файле <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() (или пока поток не будет разблокирован ложным образом). Это повторяется до тех пор, пока значения не окажутся неравными.

1,2) Порядок синхронизации памяти - std:: memory_order_seq_cst .
3,4) Порядок синхронизации памяти - order .
Если order является одним из std:: memory_order_release и std:: memory_order_acq_rel , поведение не определено.

Эти функции гарантированно возвращают управление только при изменении значения, даже если базовая реализация разблокируется ложно.

Содержание

Параметры

object - указатель на атомарный флаг для проверки и ожидания
old - значение, которое проверяется на отсутствие в атомарном флаге
order - порядок синхронизации памяти

Возвращаемое значение

(нет)

Примечания

Эта форма обнаружения изменений часто более эффективна, чем простое опрашивание или чистые спинлоки.

Из-за проблемы ABA , временные изменения с old на другое значение и обратно на old могут быть пропущены и не разблокировать.

Пример

Смотрите также

(C++20)
уведомляет по крайней мере один поток, ожидающий атомарный объект
(публичная функция-член std::atomic_flag )
(C++20)
уведомляет все потоки, заблокированные в ожидании атомарного объекта
(публичная функция-член std::atomic_flag )
уведомляет поток, заблокированный в atomic_flag_wait
(функция)
уведомляет все потоки, заблокированные в atomic_flag_wait
(функция)