std::atomic_ref<T>::wait
De cppreference.com
< cpp | atomic | atomic ref
(desde C++20) | ||
void wait( T old, std::memory_order order = std::memory_order::seq_cst)constnoexcept; | ||
void wait( T old, std::memory_order order = std::memory_order::seq_cst)constvolatilenoexcept; | ||
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 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_ref 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.
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.
[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_wait. (plantilla de función) |
(C++20) | Notifica a todos los hilos bloqueados en atomic_wait. (plantilla de función) |