std::atomic_wait, std::atomic_wait_explicit
Definido en el archivo de encabezado <atomic> | ||
(1) | (desde C++20) | |
template<class T > void atomic_wait(conststd::atomic<T>* object, | ||
template<class T > void atomic_wait(constvolatilestd::atomic<T>* object, | ||
(2) | (desde C++20) | |
template<class T > void atomic_wait_explicit(conststd::atomic<T>* object, | ||
template<class T > void atomic_wait_explicit(constvolatilestd::atomic<T>* object, | ||
Realiza operaciones de espera atómicas. Se comporta como si realizara repetidamente los siguientes pasos:
- Compara la representación de valor de object->load(std::memory_order_seq_cst) u object->load(order) con el de
old
.- Si son iguales bit a bit, entonces se bloquea hasta que se notifique a *object por std::atomic::notify_one() o std::atomic::notify_all(), o el hilo se desbloquee de manera espuria.
- De lo contrario, regresa.
Se garantiza que estas funciones regresarán solo si el valor ha cambiado, incluso si la implementación subyacente se desbloquea de manera espuria.
Contenido |
[editar]Parámetros
object | - | Un puntero al objeto atómico a verificar y en el cual esperar. |
old | - | El valor a verificar que el objeto atómico ya no contenga. |
order | - | El ordenamiento 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 cambios suele ser más eficaz que el simple sondeo o los spinlocks puros.
Debido al problema ABA, los cambios transitorios de old
a otro valor y de nuevo a old
pueden perderse y no desbloquearse.
La comparación es bit a bit (similar a std::memcpy); no se utiliza ningún operador de comparación. Se ignoran los bits de relleno que nunca participan en la representación del valor de un objeto.
[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 de std::atomic ) |
(C++20) | Notifica a todos los hilos/subprocesos bloqueados esperando al objeto atómico. (función miembro pública de std::atomic ) |
(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) |