std::atomic_flag::wait
De cppreference.com
< cpp | atomic | atomic flag
(desde C++20) | ||
void wait( bool old, std::memory_order order = std::memory_order::seq_cst ) const noexcept; |
||
void wait( bool old, std::memory_order order = std::memory_order::seq_cst ) const volatile noexcept; |
||
Realiza operaciones atómicas de espera. Se comporta como si repetidamente realizara los siguientes pasos:
- Compara this->test(order) con la de
old
.- Si son iguales, entonces se bloquea hasta que *this es notificado mediante notify_one() o notify_all(), o el hilo se desbloquea falsamente (spuriously).
- De otra forma, regresa.
Se garantiza que estas funciones solamente regresan si el valor ha cambiado, aun si la implementación subyacente desbloquea falsamente.
Contenido |
[editar] Parámetros
old | - | El valor a comprobar que el objeto de atomic_flag 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 |
[editar] Valor de retorno
(Ninguno)
[editar] Notas
Esta forma de detección de cambio frecuentemente es más eficiente que un simple sondeo (polling) o cerrojos de espín (spinlocks).
Debido al problema ABA, cambios transitorios de old
a otro valor y de regreso a old
pueden perderse, y no desbloquear.
[editar] Ejemplo
Esta sección está incompleta Razón: sin ejemplo |
[editar] Véase también
(C++20) |
Notifica al menos a un hilo/subproceso esperando al objeto atómico. (función miembro pública) |
(C++20) |
Notifica a todos los hilos/subprocesos bloqueados esperando al objeto atómico. (función miembro pública) |
(C++20) |
Notifica a un hilo bloqueado en atomic_flag_wait. (función) |
(C++20) |
Notifica a todos los hilos bloqueados en atomic_flag_wait. (función) |