Namespaces
Variants

std:: atomic_wait, std:: atomic_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
atomic_wait atomic_wait_explicit
(C++20) (C++20)
Free functions for atomic flags
Definido en el encabezado <atomic>
template < class T >

void atomic_wait ( const std:: atomic < T > * object,

typename std:: atomic < T > :: value_type old ) ;
(1) (desde C++20)
template < class T >

void atomic_wait ( const volatile std:: atomic < T > * object,

typename std:: atomic < T > :: value_type old ) ;
(2) (desde C++20)
template < class T >

void atomic_wait_explicit ( const std:: atomic < T > * object,
typename std:: atomic < T > :: value_type old,

std:: memory_order order ) ;
(3) (desde C++20)
template < class T >

void atomic_wait_explicit ( const volatile std:: atomic < T > * object,
typename std:: atomic < T > :: value_type old,

std:: memory_order order ) ;
(4) (desde C++20)

Realiza operaciones de espera atómicas. Se comporta como si repitiera los siguientes pasos:

  • Compare la representación de valor de object - > load ( ) (para las sobrecargas (1,2) ) o object - > load ( order ) (para las sobrecargas (3,4) ) con la de old .
    • Si son bitwise iguales, entonces bloquea hasta que * object sea notificado por std::atomic::notify_one() o std::atomic::notify_all() , o el hilo se desbloquee espuriamente.
    • De lo contrario, retorna.

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

1,2) Equivalente a object - > wait ( old ) .
3,4) Equivalente a object - > wait ( old, order ) .
Si order es uno de std :: memory_order :: release y std :: memory_order :: acq_rel , el comportamiento es indefinido.

Contenidos

Parámetros

object - puntero al objeto atómico a verificar y esperar
old - el valor para verificar que el objeto 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.

La comparación es bit a bit (similar a std::memcmp ); no se utiliza ningún operador de comparación. Los bits de relleno que nunca participan en la representación del valor de un objeto son ignorados.

Ejemplo

Véase también

(C++20)
bloquea el hilo hasta que sea notificado y el valor atómico cambie
(función miembro pública de std::atomic<T> )
(C++20)
notifica al menos un hilo esperando en el objeto atómico
(función miembro pública de std::atomic<T> )
(C++20)
notifica todos los hilos bloqueados esperando en el objeto atómico
(función miembro pública de std::atomic<T> )
notifica un hilo bloqueado en atomic_wait
(plantilla de función)
notifica todos los hilos bloqueados en atomic_wait
(plantilla de función)