condition_variable_any (Clase)
Utilice la clase condition_variable_any
para esperar un evento que tenga cualquier tipo mutex
.
Sintaxis
class condition_variable_any;
Miembros
Constructores
Nombre | Descripción |
---|---|
condition_variable_any | Construye un objeto condition_variable_any . |
Funciones
Nombre | Descripción |
---|---|
notify_all | Desbloquea todos los subprocesos que están esperando el objeto condition_variable_any . |
notify_one | Desbloquea uno de los subprocesos que están esperando el objeto condition_variable_any . |
wait | Bloquea un subproceso. |
wait_for | Bloquea un subproceso y establece un intervalo de tiempo después del cual el subproceso se desbloquea. |
wait_until | Bloquea un subproceso y establece un punto máximo en el tiempo en el que el subproceso se desbloquea. |
condition_variable_any
Construye un objeto condition_variable_any
.
condition_variable_any();
Comentarios
Si no queda suficiente memoria disponible, el constructor produce un objeto system_error que tiene un código de error de not_enough_memory
. Si el objeto no puede construirse porque algún otro recurso no está disponible, el constructor produce un objeto system_error
que tiene un código de error de resource_unavailable_try_again
.
notify_all
Desbloquea todos los subprocesos que están esperando el objeto condition_variable_any
.
void notify_all() noexcept;
notify_one
Desbloquea uno de los subprocesos que están esperando el objeto condition_variable_any
.
void notify_one() noexcept;
wait
Bloquea un subproceso.
template <class Lock>
void wait(Lock& Lck);
template <class Lock, class Predicate>
void wait(Lock& Lck, Predicate Pred);
Parámetros
Lck
Objeto mutex
de cualquier tipo.
Pred
Cualquier expresión que devuelve true
o false
.
Comentarios
El primer método se bloquea hasta que el objeto condition_variable_any
se señaliza mediante una llamada a notify_one o a notify_all. También se puede reactivar en falso.
El segundo método en efecto ejecuta el código siguiente.
while (!Pred())
wait(Lck);
wait_for
Bloquea un subproceso y establece un intervalo de tiempo después del cual el subproceso se desbloquea.
template <class Lock, class Rep, class Period>
bool wait_for(Lock& Lck, const chrono::duration<Rep, Period>& Rel_time);
template <class Lock, class Rep, class Period, class Predicate>
bool wait_for(Lock& Lck, const chrono::duration<Rep, Period>& Rel_time, Predicate Pred);
Parámetros
Lck
Objeto mutex
de cualquier tipo.
Rel_time
Objeto chrono::duration
que especifica la cantidad de tiempo que tiene que transcurrir hasta que el subproceso se reactive.
Pred
Cualquier expresión que devuelve true
o false
.
Valor devuelto
El primer método devuelve cv_status::timeout
si la espera termina cuando Rel_time ha transcurrido. De lo contrario, el método devuelve cv_status::no_timeout
.
El segundo método devuelve el valor de Pred.
Comentarios
El primer método se bloquea hasta que se señaliza el objeto condition_variable_any
mediante una llamada a notify_one o notify_all, o hasta que el intervalo Rel_time ha transcurrido. También se puede reactivar en falso.
El segundo método en efecto ejecuta el código siguiente.
while(!Pred())
if(wait_for(Lck, Rel_time) == cv_status::timeout)
return Pred();
return true;
wait_until
Bloquea un subproceso y establece un punto máximo en el tiempo en el que el subproceso se desbloquea.
template <class Lock, class Clock, class Duration>
void wait_until(Lock& Lck, const chrono::time_point<Clock, Duration>& Abs_time);
template <class Lock, class Clock, class Duration, class Predicate>
void wait_until(
Lock& Lck,
const chrono::time_point<Clock, Duration>& Abs_time,
Predicate Pred);
template <class Lock>
void wait_until(Lock Lck, const xtime* Abs_time);
template <class Lock, class Predicate>
void wait_until(
Lock Lck,
const xtime* Abs_time,
Predicate Pred);
Parámetros
Lck
Objeto de exclusión mutua.
Abs_time
Un objeto chrono::time_point.
Pred
Cualquier expresión que devuelve true
o false
.
Valor devuelto
Los métodos que devuelven un tipo cv_status
devuelven cv_status::timeout
si la espera termina cuando transcurre Abs_time. De lo contrario, los métodos devuelven cv_status::no_timeout
.
Los métodos que devuelven un tipo bool
devuelven el valor de Pred.
Comentarios
El primer método se bloquea hasta que el objeto condition_variable
se señaliza mediante una llamada a notify_one o a notify_all, o hasta que transcurre Abs_time. También se puede reactivar en falso.
El segundo método en efecto ejecuta el código siguiente.
while(!Pred())
if(wait_until(Lck, Abs_time) == cv_status::timeout)
return Pred();
return true;
Los métodos tercero y cuarto utilizan un puntero a un objeto de tipo xtime
para reemplazar el objeto chrono::time_point
. El objeto xtime
especifica el tiempo máximo que hay que esperar una señal.