std::atomic_flag::wait
De cppreference.com
| (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 deold.- Si son iguales, entonces se bloquea hasta que
*thises notificado mediante notify_one() o notify_all(), o el hilo se desbloquea falsamente (spuriously). - De otra forma, regresa.
- Si son iguales, entonces se bloquea hasta que
Se garantiza que estas funciones solamente regresan si el valor ha cambiado, aun si la implementación subyacente desbloquea falsamente.
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 |
Valor de retorno
(Ninguno)
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.
Ejemplo
| Esta sección está incompleta Razón: sin ejemplo |
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) |