Partager via


<condition_variable>

Définit les classes condition_variable et condition_variable_any utilisées pour créer des objets qui attendent une condition soit true.

Cet en-tête utilise le runtime d'accès concurrentiel (ConcRT) pour pouvoir l'utiliser avec d'autres mécanismes de ConcRT.Pour plus d'informations sur ConcRT, consultez Concurrency Runtime.

#include <condition_variable>

[!REMARQUE]

Dans le code compilé à l'aide de /clr ou d' /clr:pure, cet en-tête est bloqué.

Hh874761.collapse_all(fr-fr,VS.110).gifRemarques

Le code que les attentes une variable de composant doivent également utiliser mutex.Un thread appelant doit verrouiller mutex avant d'appeler les fonctions qui attendent la variable de condition.mutex est alors verrouillé lorsque la fonction appelée est retournée.mutex n'est pas verrouillé pendant que le thread attend la condition soit vraie.Afin qu'aucun résultat imprévisible, chaque thread que les attentes une variable de condition doit utiliser le même objet d' mutex .

Les objets du type condition_variable_any peuvent être utilisés avec un mutex de tout type.Le type du mutex utilisé ne doit pas fournir la méthode d' try_lock .Les objets du type condition_variable peuvent être utilisés avec un mutex de type unique_lock<mutex>.Les objets de ce type peuvent être plus rapides que les objets de type condition_variable_any<unique_lock<mutex>>.

Pour qu'un événement, verrouillez d'abord le mutex, puis appelez ensuite l'une des méthodes d' wait sur la variable de condition.Les blocs d'appel d' wait jusqu'à ce qu'un autre thread signale la variable de condition.

Les commandes fausses se produisent lorsque les threads qui attendent des variables de condition deviennent débloqués sans notifications appropriées.Pour identifier de telles fausses commandes, le code que les attentes une condition à devenir la valeur true doivent explicitement vérifier cette condition lorsque retourne de code d'une attente s'exécutent.Cela est généralement effectuée à l'aide d'une boucle ; vous pouvez utiliser wait(unique_lock<mutex>& lock, Predicate pred) pour effectuer cette boucle pour vous.

while (condition is false)
    wait for condition variable;

Les classes chacune d' condition_variable_any et d' condition_variable ont trois méthodes qui attendent une condition.

  • wait attend un point illimitée.

  • attentes d'wait_until jusqu'à timespécifié.

  • wait_for attend time intervalspécifié.

Chacune de ces méthodes a deux versions surchargées.Il attend simplement et peut se réveiller faussement.L'autre prend un argument template supplémentaire qui définit un attribut.La méthode ne retourne pas jusqu'à ce que l'attribut soit true.

Chaque classe a également deux méthodes utilisées pour indiquer une variable de condition que son état est true.

  • notify_one réveille un des threads qui attend la variable de condition.

  • notify_all réveille tous les threads qui attendent la variable de condition.

Voir aussi

Référence

classe condition_variable

classe condition_variable_any

énumération de cv_status

Autres ressources

Fichiers d'en-tête