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)
Definido en el encabezado <atomic>
void atomic_flag_wait ( const atomic_flag * object, bool old ) noexcept ;
(1) (desde C++20)
void atomic_flag_wait ( const volatile atomic_flag * object,
bool old ) noexcept ;
(2) (desde C++20)
void atomic_flag_wait_explicit ( const atomic_flag * object,
bool old, std:: memory_order order ) noexcept ;
(3) (desde C++20)
void atomic_flag_wait_explicit ( const volatile atomic_flag * object,
bool old, std:: memory_order order ) noexcept ;
(4) (desde C++20)

Realiza operaciones de espera atómicas.

Compara object - > test ( std:: memory_order_seq_cst ) o object - > test ( order ) con old , y si son iguales entonces bloquea hasta que * object sea notificado por std::atomic_flag::notify_one() o std::atomic_flag::notify_all() (o el hilo se desbloquee espuriamente). Esto se repite hasta que los valores se comparen como desiguales.

1,2) El orden de sincronización de memoria es std:: memory_order_seq_cst .
3,4) El orden de sincronización de memoria es order .
Si order es uno de std:: memory_order_release y std:: memory_order_acq_rel , el comportamiento es indefinido.

Estas funciones están garantizadas para retornar solo si el valor ha cambiado, incluso si la implementación subyacente se desbloquea espuriamente.

Contenidos

Parámetros

object - puntero al indicador atómico para verificar y esperar
old - el valor para verificar que el indicador atómico ya no contiene
order - el orden de sincronización de memoria

Valor de retorno

(ninguno)

Notas

Esta forma de detección de cambios suele ser más eficiente que el sondeo simple o los bloqueos de giro puros.

Debido al problema ABA , los cambios transitorios de old a otro valor y de vuelta a old podrían pasar desapercibidos y no desbloquearse.

Ejemplo

Véase también

(C++20)
notifica al menos un hilo esperando en el objeto atómico
(función miembro pública de std::atomic_flag )
(C++20)
notifica todos los hilos bloqueados esperando en el objeto atómico
(función miembro pública de std::atomic_flag )
notifica un hilo bloqueado en atomic_flag_wait
(función)
notifica todos los hilos bloqueados en atomic_flag_wait
(función)