Partilhar via


<condition_variable>

Define as classes condition_variable e condition_variable_any que são usadas para criar objetos que esperam uma condição para tornar-se verdadeiros.

Este cabeçalho usa o tempo de execução (ConcRT) de simultaneidade para que você possa usar o em conjunto com outros mecanismos de ConcRT.Para obter mais informações sobre ConcRT, consulte Tempo de execução de concorrência.

#include <condition_variable>
ObservaçãoObservação

No código que é criado usando /clr ou /clr:pure, este cabeçalho é bloqueado.

Hh874761.collapse_all(pt-br,VS.110).gifComentários

O código que as espera para uma variável de condição também devem usar mutex.Um segmento de chamada deve bloquear mutex antes dele chamar funções que esperam a variável da condição.mutex é bloqueado em quando a função chamada retorna.mutex não está bloqueado quando o segmento esperar a condição para tornar-se true.De modo que não haja resultado imprevisível, cada segmento que as espera para uma variável de condição devem usar o mesmo objeto de mutex .

Os objetos do tipo condition_variable_any podem ser usados com um mutex de qualquer tipo.O tipo mutex que é usado não precisará fornecer o método de try_lock .Os objetos do tipo condition_variable só podem ser usados com um mutex de tipo unique_lock<mutex>.Os objetos desse tipo podem ser mais rápido do que objetos do tipo condition_variable_any<unique_lock<mutex>>.

Para aguardar um evento, bloquear o primeiro mutex, e então chame um dos métodos de wait na variável da condição.Blocos de chamada de wait até outro segmento sinalizam o variável da condição.

As excitações especulativos ocorrem quando os segmentos que estão aguardando variáveis de condição se tornam desbloqueados sem notificações apropriadas.Para reconhecer tais excitações especulativos, o código que as espera para que uma condição se torne true devem explicitamente verificar a condição quando retorna o código de uma espera funcionam.Geralmente isso é feito usando um loop; você pode usar wait(unique_lock<mutex>& lock, Predicate pred) para executar este loop para você.

while (condition is false)
    wait for condition variable;

condition_variable_any e condition_variable classe possuem três métodos que esperam uma condição.

  • wait espera um período de tempo ilimitado.

  • pára dewait_until até timeespecificado.

  • wait_for espera time intervalespecificado.

Cada um desses métodos tem duas versões sobrecarregadas.Um apenas espera e pode spuriously acordar.O outro utiliza um argumento adicional do modelo que define um predicado.O método não retorna até que o predicado está true.

Cada classe também tem dois métodos que são usados para notificar uma variável de condição que sua condição é true.

  • notify_one acorda um dos segmentos que está aguardando a variável da condição.

  • notify_all acorda todos os segmentos que estão aguardando a variável da condição.

Consulte também

Referência

Classe CONDITION_VARIABLE

Classe condition_variable_any

Enumeração cv_status

Outros recursos

Arquivos de cabeçalho