<condition_variable>

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Define las clases de condition_variable y condition_variable_any que se utilizan para crear objetos que esperan 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.

#include <condition_variable>  

System_CAPS_ICON_note.jpg Nota

En el código que se compila con /CLR o /CLR: pure, este encabezado está bloqueado.

Comentarios

Código que se espera que una variable de condición también debe usar un mutex. Debe bloquear un subproceso de llamada la mutex antes de llamar a las funciones que espere a que la variable de condición. El mutex se bloqueará cuando vuelve la función llamada. El mutex no está bloqueado mientras el subproceso espera que la condición sea true. Por lo que no quedan resultados imprevisibles, cada subproceso que espera a que una variable de condición debe utilizar la misma mutex objeto.

Objetos de tipo condition_variable_any se puede usar con una exclusión mutua de cualquier tipo. No tiene el tipo de la exclusión mutua que se usa proporcionar el try_lock método. Objetos de tipo condition_variable sólo puede utilizarse con una exclusión mutua del tipo unique_lock<mutex>. 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, bloquear la exclusión mutua y, a continuación, llame a uno de los wait métodos en la variable de condición. El wait llamar a bloques hasta que otro subproceso señala la variable de condición.

Activaciones falsas se producen cuando los subprocesos que están esperando para las variables de condición se desbloquean sin notificaciones apropiadas. Para reconocer tales activaciones falsas, código que espera a que una condición sea true debe comprobar explícitamente esa condición cuando se devuelve el código de una función de espera. Esto normalmente se realiza mediante un bucle. Puede utilizar wait(unique_lock<mutex>& lock, Predicate pred) para realizar este bucle para usted.

while (condition is false)
    wait for condition variable;

El condition_variable_any y condition_variable cada clase tiene tres métodos que esperan una condición.

  • waitespera durante un período de tiempo ilimitado.

  • wait_untilespera a que un objeto time.

  • wait_forespera a que un objeto time interval.

Cada uno de estos métodos tiene dos versiones sobrecargadas. Sólo uno espera y se puede reactivar en falso. El otro toma un argumento de plantilla adicional que define un predicado. El método no devuelve hasta que el predicado es true.

Cada clase también tiene dos métodos que se usan para notificar a una variable de condición que su condición es true.

  • notify_onese activa uno de los subprocesos que está esperando la variable de condición.

  • notify_allse activa todos los subprocesos que están esperando la variable de condición.

Referencia de archivos de encabezado
CONDITION_VARIABLE (clase)
condition_variable_any (clase)

Mostrar: