Classe condition_variable_any

Use a classe condition_variable_any para aguardar um evento que tem qualquer tipo mutex.

Sintaxe

class condition_variable_any;

Membros

Construtores

Nome Descrição
condition_variable_any Constrói um objeto condition_variable_any.

Funções

Nome Descrição
notify_all Desbloqueia todos os threads que estão aguardando o objeto condition_variable_any.
notify_one Desbloqueia um dos threads que estão aguardando o objeto condition_variable_any.
wait Bloqueia um thread.
wait_for Bloqueia um thread e define um intervalo de tempo após o qual o thread será desbloqueado.
wait_until Bloqueia um thread e define um ponto máximo no tempo no qual o thread será desbloqueado.

condition_variable_any

Constrói um objeto condition_variable_any.

condition_variable_any();

Comentários

Se não tiver memória suficiente disponível, o construtor gerará um objeto system_error que tem um código de erro not_enough_memory. Se o objeto não puder ser criado porque algum outro recurso não está disponível, o construtor gerará um objeto system_error que tem um código de erro resource_unavailable_try_again.

notify_all

Desbloqueia todos os threads que estão aguardando o objeto condition_variable_any.

void notify_all() noexcept;

notify_one

Desbloqueia um dos threads que estão aguardando o objeto condition_variable_any.

void notify_one() noexcept;

wait

Bloqueia um thread.

template <class Lock>
void wait(Lock& Lck);

template <class Lock, class Predicate>
void wait(Lock& Lck, Predicate Pred);

Parâmetros

Lck
Um objeto mutex de qualquer tipo.

Pred
Qualquer expressão que retorna true ou false.

Comentários

O primeiro método bloqueia até que o objeto condition_variable_any seja sinalizado por uma chamada para notify_one ou notify_all. Ela também pode ser ativada falsamente.

O segundo método, na verdade, executa o código a seguir.

while (!Pred())
    wait(Lck);

wait_for

Bloqueia um thread e define um intervalo de tempo após o qual o thread será desbloqueado.

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
Um objeto mutex de qualquer tipo.

Rel_time
Um objeto chrono::duration que especifica a quantidade de tempo antes que o thread seja ativado.

Pred
Qualquer expressão que retorna true ou false.

Valor de Devolução

O primeiro método retornará cv_status::timeout se a espera terminar quando tiver decorrido Rel_time. Do contrário, o método retorna cv_status::no_timeout.

O segundo método retorna o valor de Pred.

Comentários

O primeiro método bloqueia até que o objeto condition_variable_any seja sinalizado por uma chamada para notify_one ou notify_all ou até que o intervalo de tempo Rel_time tenha decorrido. Ela também pode ser ativada falsamente.

O segundo método, na verdade, executa o código a seguir.

while(!Pred())
    if(wait_for(Lck, Rel_time) == cv_status::timeout)
    return Pred();

return true;

wait_until

Bloqueia um thread e define um ponto máximo no tempo no qual o thread será desbloqueado.

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
Um objeto mutex.

Abs_time
Um objeto chrono::time_point.

Pred
Qualquer expressão que retorna true ou false.

Valor de Devolução

Os métodos que retornam um tipo cv_status retornarão cv_status::timeout se a espera terminar quando Abs_time tiver decorrido. Caso contrário, os métodos retornarão cv_status::no_timeout.

Os métodos que retornam um bool retornarão o valor de Pred.

Comentários

O primeiro método bloqueia até que o objeto condition_variable seja sinalizado por uma chamada para notify_one ou notify_all ou até Abs_time. Ela também pode ser ativada falsamente.

O segundo método, na verdade, executa o código a seguir.

while(!Pred())
    if(wait_until(Lck, Abs_time) == cv_status::timeout)
    return Pred();

return true;

O terceiro e o quarto métodos usam um ponteiro para um objeto do tipo xtime para substituir o objeto chrono::time_point. O objeto xtime especifica a quantidade máxima de tempo para esperar um sinal.