Condividi tramite


<condition_variable>

Definisce le classi condition_variable e condition_variable_any utilizzate per creare oggetti che rimangono una condizione per diventare true.

Questa intestazione utilizza il runtime di concorrenza (ConcRT) poterlo utilizzare con altri meccanismi ConcRT.Per ulteriori informazioni su ConcRT, vedere Runtime di concorrenza.

#include <condition_variable>

[!NOTA]

Nel codice compilato utilizzando /clr o /clr:pure, questa intestazione è bloccata.

Hh874761.collapse_all(it-it,VS.110).gifNote

Il codice che attende una variabile di condizione è possibile utilizzare mutex.Un thread chiamante deve bloccare mutex prima di chiamare le funzioni che restano la variabile di condizione.mutex viene bloccato quando la chiamata di funzione.mutex non è bloccato mentre attende che il thread che la condizione per diventare true.In modo che non si verifichino risultati imprevisti, ogni thread che attende una variabile di condizione deve utilizzare lo stesso oggetto di mutex.

Oggetti di tipo condition_variable_any possono essere utilizzati con un mutex di qualsiasi tipo.Il tipo di esclusione reciproca utilizzata non deve fornire il metodo di try_lock.Oggetti di tipo condition_variable possono essere utilizzati solo con un mutex di tipo unique_lock<mutex>.Gli oggetti di questo tipo possono essere più veloci degli oggetti di tipo condition_variable_any<unique_lock<mutex>>.

Per attendere un evento, innanzitutto blocchi del mutex e chiamare uno dei metodi di wait la variabile di condizione.I blocchi di chiamata di wait fino a un altro thread segnala la variabile di condizione.

Le sveglie spurie si verificano quando i thread in attesa le variabili di condizione vengono sbloccati senza notifiche appropriate.Per riconoscere tali sveglie spurie, il codice che attende una condizione diventi vera devono controllare esplicitamente tale condizione al completamento di codice da un'attesa esecuzione.In genere viene eseguita tramite un ciclo; è possibile utilizzare wait(unique_lock<mutex>& lock, Predicate pred) per eseguire il ciclo automaticamente.

while (condition is false)
    wait for condition variable;

condition_variable_any e condition_variable le classi ognuno tre metodi che restano una condizione.

  • attesa diwait un periodo di tempo non associato.

  • attende diwait_until fino a timespecificato.

  • attesa diwait_fortime intervalspecificato.

Ognuno di questi metodi sono disponibili due versioni di overload.Solo attende una e possono svegliare spurio.L'altro accetta un argomento di modello aggiuntivo che definisce un predicato.Il metodo non restituisce alcun valore finché il predicato non sia true.

Ogni classe dispone inoltre di due metodi utilizzati per notificare a una variabile di condizione che il relativo stato è true.

  • notify_one si attiva uno dei thread in attesa della variabile di condizione.

  • notify_all sveglia tutti thread in attesa della variabile di condizione.

Vedere anche

Riferimenti

classe condition_variable

classe condition_variable_any

enumerazione di cv_status

Altre risorse

File di intestazione