Freigeben über


condition_variable-Klasse

Verwenden Sie die condition_variable-Klasse, um ein Ereignis zu erwarten, wenn Sie über ein mutex des Typs unique_lock<mutex> verfügen. Objekte dieses Typs haben möglicherweise eine bessere Leistung als Objekte vom Typ condition_variable_any unique_lock Mutex>>.<<

Syntax

class condition_variable;

Member

Konstruktoren

Name Beschreibung
condition_variable Erstellt ein condition_variable-Objekt.

Functions

Name Beschreibung
native_handle Gibt den implementierungsspezifischen Typ zurück, der das Handle "condition_variable" darstellt.
notify_all Hebt die Blockierung aller Threads auf, die das condition_variable-Objekt erwarten.
notify_one Hebt die Blockierung von einem der Threads, die auf das condition_variable-Objekt warten, auf.
wait Blockiert einen Thread.
wait_for Blockiert einen Thread und legt ein Zeitintervall fest, nachdem die Blockierung des Threads aufgehoben wird.
wait_until Blockiert einen Thread und legt einen maximalen Zeitpunkt fest, an dem die Blockierung des Threads aufgehoben wird.

condition_variable

Erstellt ein condition_variable-Objekt.

condition_variable();

Hinweise

Wenn nicht genügend Arbeitsspeicher verfügbar ist, gibt der Konstruktor ein system_error-Objekt mit einem not_enough_memory-Fehlercode aus. Wenn das Objekt nicht erstellt werden kann, da eine andere Ressource nicht verfügbar ist, wird vom Konstruktor ein system_error-Objekt mit einem resource_unavailable_try_again-Fehlercode ausgelöst.

native_handle

Gibt den implementierungsspezifischen Typ zurück, der das „condition_variable“-Handle darstellt.

native_handle_type native_handle();

Rückgabewert

native_handle_type wird als Zeiger auf interne Datenstrukturen Concurrency Runtime von Concurrency Runtime definiert.

notify_all

Hebt die Blockierung aller Threads auf, die das condition_variable-Objekt erwarten.

void notify_all() noexcept;

notify_one

Hebt die Blockierung von einem der Threads, die auf das condition_variable-Objekt warten auf.

void notify_one() noexcept;

wait

Blockiert einen Thread.

void wait(unique_lock<mutex>& Lck);

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

Parameter

Lck
Ein unique_lock mutex-Objekt>.<

Pred
Jeder gültige Ausdruck, der true oder false zurückgibt.

Hinweise

Die erste Methode sperrt, bis das condition_variable-Objekt durch einen Aufruf von notify_one oder notify_all signalisiert wurde. Sie kann auch falsch aktiviert werden.

Tatsächlich führt die zweite Methode den folgenden Code aus.

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

wait_for

Blockiert einen Thread und legt ein Zeitintervall fest, nachdem die Blockierung des Threads aufgehoben wird.

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);

Parameter

Lck
Ein unique_lock mutex-Objekt>.<

Rel_time
Ein chrono::duration-Objekt, das die Zeitdauer vor der Aktivierung des Threads angibt.

Pred
Jeder gültige Ausdruck, der true oder false zurückgibt.

Rückgabewert

Die erste Methode gibt zurück cv_status::timeout , wenn die Wartezeit beendet wird, wenn Rel_time verstrichen ist. Andernfalls gibt diese Methode cv_status::no_timeout zurück.

Die zweite Methode gibt den Wert von Pred zurück.

Hinweise

Die erste Methode blockiert, bis das condition_variable Objekt durch einen Aufruf von notify_one oder notify_all oder bis zum Verstrichen des Zeitintervalls Rel_time signalisiert wird. Sie kann auch falsch aktiviert werden.

Tatsächlich führt die zweite Methode den folgenden Code aus.

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

return true;

wait_until

Blockiert einen Thread und legt einen maximalen Zeitpunkt fest, an dem die Blockierung des Threads aufgehoben wird.

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);

Parameter

Lck
Ein unique_lock mutex-Objekt>.<

Abs_time
Ein chrono::time_point-Objekt

Pred
Jeder gültige Ausdruck, der true oder false zurückgibt.

Rückgabewert

Methoden, die einen cv_status Typ zurückgeben cv_status::timeout , wenn die Wartezeit beendet wird, wenn Abs_time verstrichen ist. Andernfalls geben diese Methoden cv_status::no_timeout zurück.

Methoden, die einen bool Rückgabewert von Pred zurückgeben.

Hinweise

Die erste Methode blockiert, bis das condition_variable-Objekt durch einen Aufruf von notify_one oder notify_all signalisiert wurde, oder bis Abs_time. Sie kann auch falsch aktiviert werden.

Tatsächlich führt die zweite Methode den folgenden Code aus.

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

return true;

Bei der dritten und vierten Methode wird einen Zeiger auf ein Objekt des Typs xtime, verwendet, um das chrono::time_point-Objekt zu ersetzen. Mit dem xtime-Objekt wird die maximale Zeit angegeben, die auf ein Signal gewartet wird.

Siehe auch

Headerdateienreferenz
<condition_variable>