<condition_variable>
Define as classes condition_variable e condition_variable_any que são usadas para criar os objetos que esperam uma condição para se tornarem true.
Este cabeçalho usa o tempo de execução (ConcRT) de simultaneidade de forma que você possa usar o junto com outros mecanismos de ConcRT. Para obter mais informações sobre como ConcRT, consulte Tempo de Execução de Simultaneidade.
#include <condition_variable>
Dica
No código que é construído usando /clr ou /clr:pure, este cabeçalho é bloqueado.
Comentários
O código que as esperas de uma variável de condição também devem usar mutex. Um thread de chamada precisará bloquear mutex antes de chamar funções que esperam a variável da condição. mutex está bloqueado em quando a função retorna chamado. mutex não é bloqueada quando o thread está esperando a condição para se tornarem true. De modo que não haja nenhum resultado imprevisível, cada thread que as esperas de 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 do mutex usado não precisa fornecer o método de try_lock . Os objetos do tipo condition_variable podem ser usados somente com um mutex do tipo unique_lock<mutex>. Os objetos desse tipo pode ser mais rápido do que objetos de tipo condition_variable_any<unique_lock<mutex>>.
Para aguardar um evento, bloqueie primeiro o mutex, e chame um dos métodos de wait na variável da condição. Os blocos de chamada de wait até outro thread sinalizam a variável da condição.
As excitações falsos ocorrem quando os threads que estão aguardando variáveis de condição se tornam desbloqueados sem notificações apropriadas. Para reconhecer como excitações falsos, o código que as esperas para que uma condição seja verdadeira explicitamente devem verificar essa condição quando retornar de código de uma espera de tabela. Isso é feito normalmente usando um loop; você pode usar wait(unique_lock<mutex>& lock, Predicate pred) para executar esse loop para você.
while (condition is false)
wait for condition variable;
condition_variable_any e condition_variable classificam possuem três métodos que esperam uma condição.
wait espera um período de tempo ilimitado.
esperas dewait_until até timeespecificado.
wait_for espera time intervalespecificado.
Cada um desses métodos tem duas versões sobrecarregadas. Apenas um espera e pode acordar spuriously. O outro usa um argumento adicional do modelo que define um predicado. O método não retorna até que o predicado deve ser true.
Cada classe também tem dois métodos que são usados para notificar uma variável da condição que sua condição é true.
notify_one acorda um dos threads que estão esperando a variável da condição.
notify_all acorda todos os threads que estão esperando a variável da condição.