std::atomic_wait, std::atomic_wait_explicit
Definido en el archivo de encabezado <atomic>
|
||
(1) | (desde C++20) | |
template< class T > void atomic_wait( const std::atomic<T>* object, |
||
template< class T > void atomic_wait( const volatile std::atomic<T>* object, |
||
(2) | (desde C++20) | |
template< class T > void atomic_wait_explicit( const std::atomic<T>* object, |
||
template< class T > void atomic_wait_explicit( const volatile std::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) |