std::atomic::wait
De cppreference.com
void wait( T old,
std::memory_order order = std::memory_order::seq_cst ) const noexcept;
|
||
void wait( T 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 la representación del valor de
this->load(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 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.
La comparación es bit a bit (similar a std::memcpy); no se utiliza un operador de comparación. Los bits de relleno que nunca participan en la representación del valor de un objeto se ignoran.
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_wait. (plantilla de función) |
(C++20) |
Notifica a todos los hilos bloqueados en atomic_wait. (plantilla de función) |