Partager via


condition_variable, classe

Utilisez la classe condition_variable pour attendre un événement quand vous avez un mutex de type unique_lock<mutex>. Les objets de ce type peuvent avoir de meilleures performances que les objets de type condition_variable_any<unique_lock<mutex>>.

Syntaxe

class condition_variable;

Membres

Constructeurs

Nom Description
condition_variable Construit un objet condition_variable.

Functions

Nom Description
native_handle Retourne le type spécifique de l’implémentation qui représente le descripteur condition_variable.
notify_all Débloque tous les threads qui attendent l’objet condition_variable.
notify_one Débloque un des threads qui attendent l’objet condition_variable.
wait Bloque un thread.
wait_for Bloque un thread et définit un intervalle de temps après lequel le thread est débloqué.
wait_until Bloque un thread et définit un point dans le temps maximal auquel le thread est débloqué.

condition_variable

Construit un objet condition_variable.

condition_variable();

Notes

Si la mémoire disponible n’est pas suffisante, le constructeur lève un objet system_error avec le code d’erreur not_enough_memory. Si l’objet ne peut pas être construit, car une autre ressource n’est pas disponible, le constructeur lève un objet system_error avec le code d’erreur resource_unavailable_try_again.

native_handle

Retourne le type spécifique de l’implémentation qui représente le descripteur condition_variable.

native_handle_type native_handle();

Valeur de retour

native_handle_type est défini comme un pointeur vers les structures de données internes du runtime d’accès concurrentiel.

notify_all

Débloque tous les threads qui attendent l’objet condition_variable.

void notify_all() noexcept;

notify_one

Débloque un des threads qui attendent l’objet condition_variable.

void notify_one() noexcept;

wait

Bloque un thread.

void wait(unique_lock<mutex>& Lck);

template <class Predicate>
void wait(unique_lock<mutex>& Lck, Predicate Pred);

Paramètres

Lck
Objet mutex> unique_lock<.

Pred
Toute expression valide qui retourne true ou false.

Notes

La première méthode se bloque jusqu’à ce que l’objet condition_variable soit signalé par un appel à notify_one ou notify_all. Elle peut également s’éveiller sans motif.

La deuxième méthode exécute le code suivant.

while(!Pred())
    wait(Lck);

wait_for

Bloque un thread et définit un intervalle de temps après lequel le thread est débloqué.

template <class Rep, class Period>
cv_status wait_for(
    unique_lock<mutex>& Lck,
    const chrono::duration<Rep, Period>& Rel_time);

template <class Rep, class Period, class Predicate>
bool wait_for(
    unique_lock<mutex>& Lck,
    const chrono::duration<Rep, Period>& Rel_time,
    Predicate Pred);

Paramètres

Lck
Objet mutex> unique_lock<.

Rel_time
Objet chrono::duration qui spécifie le délai avant l’éveil du thread.

Pred
Toute expression valide qui retourne true ou false.

Valeur de retour

La première méthode retourne cv_status::timeout si l’attente se termine lorsque Rel_time s’est écoulé. Dans le cas contraire, la méthode retourne cv_status::no_timeout.

La deuxième méthode retourne la valeur de Pred.

Notes

La première méthode se bloque jusqu’à ce que l’objet condition_variable soit signalé par un appel à notify_one ou notify_all ou jusqu’à ce que l’intervalle de temps Rel_time s’est écoulé. Elle peut également s’éveiller sans motif.

La deuxième méthode exécute le code suivant.

while(!Pred())
    if(wait_for(Lck, Rel_time) == cv_status::timeout)
    return Pred();

return true;

wait_until

Bloque un thread et définit un point dans le temps maximal auquel le thread est débloqué.

template <class Clock, class Duration>
cv_status wait_until(
    unique_lock<mutex>& Lck,
    const chrono::time_point<Clock, Duration>& Abs_time);

template <class Clock, class Duration, class Predicate>
bool wait_until(
    unique_lock<mutex>& Lck,
    const chrono::time_point<Clock, Duration>& Abs_time,
    Predicate Pred);

cv_status wait_until(
    unique_lock<mutex>& Lck,
    const xtime* Abs_time);

template <class Predicate>
bool wait_until(
    unique_lock<mutex>& Lck,
    const xtime* Abs_time,
    Predicate Pred);

Paramètres

Lck
Objet mutex> unique_lock<.

Abs_time
Objet chrono::time_point.

Pred
Toute expression valide qui retourne true ou false.

Valeur de retour

Méthodes qui retournent un cv_status type de retour cv_status::timeout si l’attente se termine lorsque Abs_time s’écoule. Sinon, les méthodes retournent cv_status::no_timeout.

Méthodes qui retournent une bool valeur de retour de Pred.

Notes

La première méthode se bloque jusqu’à ce que l’objet condition_variable soit signalé par un appel à notify_one ou notify_all, ou jusqu’à Abs_time. Elle peut également s’éveiller sans motif.

La deuxième méthode exécute le code suivant

while(!Pred())
    if(wait_until(Lck, Abs_time) == cv_status::timeout)
    return Pred();

return true;

Les troisième et quatrième méthodes utilisent un pointeur vers un objet de type xtime pour remplacer l’objet chrono::time_point. L’objet xtime spécifie le délai d’attente maximal d’un signal.

Voir aussi

Informations de référence sur les fichiers d’en-tête
<condition_variable>