<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ção |
---|
No código que é criado usando /clr ou /clr:pure, este cabeçalho é bloqueado. |
Comentá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.