<condition_variable>
Define las clases condition_variable y condition_variable_any que se usan para crear objetos que esperan que una condición sea True.
Este encabezado utiliza el runtime de simultaneidad (ConcRT) para que pueda utilizarlo junto con otros mecanismos de ConcRT. Para obtener más información sobre ConcRT, vea Runtime de simultaneidad.
Requisitos
Encabezado:<condition_variable>
Espacio de nombres: std
Nota:
En el código que se compila mediante /clr, este encabezado está bloqueado.
Comentarios
El código que espera una variable de condición también debe usar una mutex
. Un subproceso de llamada debe bloquear la mutex
antes de llamar a las funciones que esperan la variable de condición. La mutex
se bloquea al volver la función llamada. La mutex
no está bloqueada mientras el subproceso espera que la condición sea True. Para que no haya resultados imprevisibles, cada subproceso que espera por una variable de condición debe usar el mismo objeto mutex
.
Se pueden usar objetos de tipo condition_variable_any
con una exclusión mutua de cualquier tipo. El tipo de la exclusión mutua que se usa no tiene que proporcionar el método try_lock
. Solo se pueden usar objetos de tipo condition_variable
con una exclusión mutua de tipo unique_lock<mutex>
. Los objetos de este tipo pueden ser más rápidos que los objetos de tipo condition_variable_any<unique_lock<mutex>>
.
Para esperar un evento, bloquee primero la exclusión mutua y después llame a uno de los métodos wait
en la variable de condición. La llamada a wait
se bloquea hasta que otro subproceso señala la variable de condición.
Las reactivaciones falsas se producen cuando los subprocesos que están esperando a las variables de condición se desbloquean sin notificaciones adecuadas. Para reconocer estas reactivaciones falsas, el código que espera a que una condición sea True debe comprobar de forma explícita esa condición cuando el código vuelva de una función wait. Normalmente, esto se realiza mediante un bucle; puede usar wait(unique_lock<mutex>& lock, Predicate pred)
para que realice este bucle por usted.
while (condition is false)
wait for condition variable;
Las clases condition_variable_any
y condition_variable
tienen tres métodos que esperan una condición.
wait
espera durante un período de tiempo ilimitado.wait_until
espera hasta unatime
especificada.wait_for
espera durante untime interval
especificado.
Cada uno de estos métodos tiene dos versiones sobrecargadas. Uno solo espera y se puede reactivar en falso. El otro toma un argumento de plantilla adicional que define un predicado. El método no vuelve hasta que el predicado sea true
.
Cada clase tiene también dos métodos que se usan para notificar a una variable de condición que su condición es true
.
notify_one
reactiva uno de los subprocesos que está esperando la variable de condición.notify_all
reactiva todos los subprocesos que están esperando la variable de condición.
Funciones y enumeraciones
void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk);
enum class cv_status { no_timeout, timeout };
Consulte también
Referencia de archivos de encabezado
condition_variable (Clase)
condition_variable_any (Clase)