Espacios de nombres
Variantes

std::atomic_flag_wait, std::atomic_flag_wait_explicit

De cppreference.com
 
 
 
Definido en el archivo de encabezado <atomic>
template< class T >
void atomic_flag_wait( const atomic_flag* object,
                       bool old ) noexcept;
template< class T >
void atomic_flag_wait( const volatile atomic_flag* object,
                       bool old ) noexcept;
template< class T >
void atomic_flag_wait_explicit( const atomic_flag* object, 
                                bool old, 
                                std::memory_order order ) noexcept;
template< class T >
void atomic_flag_wait_explicit( const volatile atomic_flag* object,
                                bool old, 
                                std::memory_order order ) noexcept;

Realiza operaciones de espera atómicas.

Compara object->test(std::memory_order_seq_cst) u object->test(order) con old, y si son iguales entonces se bloquea hasta que se ha notificado a *object mediante std::atomic_flag::notify_one() o std::atomic_flag::notify_all() (o el hilo se desbloquea falsamente). Esto se repite hasta que los valores se comparan desiguales.

1) Equivalente a object->wait(old, std::memory_order_seq_cst).
2) Equivalente a object->wait(old, order).

Se garantiza que estas funciones solamente regresan si el valor ha cambiado, aun si la implementación subyacente desbloquea falsamente.

Parámetros

object - Puntero a la bandera atómica a comprobar y por la cual esperar.
old - El valor a comprobar que la bandera atómica ya no contenga.
order - El orden de sincronización de memoria para esta operación. No debe ser std::memory_order::release o std::memory_order::acq_rel

Valor de retorno

(Ninguno)

Notas

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

Debido al problema ABA, cambios transitorios de old a otro valor y de regreso a old pueden perderse, y no desbloquear.

Ejemplo

Véase también

Notifica al menos a un hilo/subproceso esperando al objeto atómico.
(función miembro pública de std::atomic_flag) [editar]
Notifica a todos los hilos/subprocesos bloqueados esperando al objeto atómico.
(función miembro pública de std::atomic_flag) [editar]
Notifica a un hilo bloqueado en atomic_flag_wait.
(función) [editar]
Notifica a todos los hilos bloqueados en atomic_flag_wait.
(función) [editar]
Morty Proxy This is a proxified and sanitized view of the page, visit original site.