std::atomic_flag_wait, std::atomic_flag_wait_explicit
De cppreference.com
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num t-dcl-rev-notes t-since-cxx20 ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num t-dcl-rev-notes t-since-cxx20 ">
</tbody><tbody>
| Definido en el archivo de encabezado <atomic>
|
||
| (1) | (desde C++20) | |
template< class T > void atomic_flag_wait( const atomic_flag* object, bool old ) noexcept; |
||
template< class T > void atomic_flag_wait( const volatile atomic_flag* object, bool old ) noexcept; |
||
| (2) | (desde C++20) | |
template< class T > void atomic_flag_wait_explicit( const atomic_flag* object, bool old, std::memory_order order ) noexcept; |
||
template< class T > void atomic_flag_wait_explicit( const volatile atomic_flag* object, bool old, std::memory_order order ) noexcept; |
||
Realiza operaciones de espera atómicas.
Compara object->test(std::memory_order_seq_cst) u object->test(order) con old, y si son iguales entonces se bloquea hasta que se ha notificado a *object mediante std::atomic_flag::notify_one() o std::atomic_flag::notify_all() (o el hilo se desbloquea falsamente). Esto se repite hasta que los valores se comparan desiguales.
1) Equivalente a
object->wait(old, std::memory_order_seq_cst).2) Equivalente a
object->wait(old, order).Se garantiza que estas funciones solamente regresan si el valor ha cambiado, aun si la implementación subyacente desbloquea falsamente.
Parámetros
| object | - | Puntero a la bandera atómica a comprobar y por la cual esperar. |
| old | - | El valor a comprobar que la bandera atómica 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 cambios suele ser más eficaz que el simple sondeo o los spinlocks puros.
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 de std::atomic_flag)
|
(C++20) |
Notifica a todos los hilos/subprocesos bloqueados esperando al objeto atómico. (función miembro pública de std::atomic_flag)
|
(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) |