condition_variable — Klasa

condition_variable Użyj klasy , aby poczekać na zdarzenie, gdy masz mutex typ unique_lock<mutex>. Obiekty tego typu mogą mieć lepszą wydajność niż obiekty typu condition_variable_any unique_lock<<mutex>>.

Składnia

class condition_variable;

Członkowie

Konstruktory

Nazwa/nazwisko opis
condition_variable condition_variable Tworzy obiekt.

Funkcje

Nazwa/nazwisko opis
native_handle Zwraca typ specyficzny dla implementacji reprezentujący uchwyt condition_variable.
Notify_all Odblokuje wszystkie wątki oczekujące na condition_variable obiekt.
notify_one Odblokuje jeden z wątków oczekujących na condition_variable obiekt.
Czekać Blokuje wątek.
wait_for Blokuje wątek i ustawia interwał czasu, po którym wątek zostanie odblokowany.
wait_until Blokuje wątek i ustawia maksymalny punkt w czasie, w którym wątek jest odblokowywany.

condition_variable

condition_variable Tworzy obiekt.

condition_variable();

Uwagi

Jeśli za mało pamięci jest dostępna, konstruktor zgłasza obiekt system_error , który zawiera not_enough_memory kod błędu. Jeśli nie można skonstruować obiektu, ponieważ inny zasób jest niedostępny, konstruktor zgłasza system_error obiekt, który zawiera resource_unavailable_try_again kod błędu.

native_handle

Zwraca typ specyficzny dla implementacji, który reprezentuje dojście condition_variable.

native_handle_type native_handle();

Wartość zwracana

native_handle_type element jest definiowany jako wskaźnik do wewnętrznych struktur danych środowiska uruchomieniowego współbieżności.

Notify_all

Odblokuje wszystkie wątki oczekujące na condition_variable obiekt.

void notify_all() noexcept;

notify_one

Odblokuje jeden z wątków oczekujących na condition_variable obiekt.

void notify_one() noexcept;

wait

Blokuje wątek.

void wait(unique_lock<mutex>& Lck);

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

Parametry

Lck
Obiekt mutex> unique_lock<.

Pred
Dowolne wyrażenie zwracające true wartość lub false.

Uwagi

Pierwsza metoda blokuje, dopóki condition_variable obiekt nie zostanie zasygnalizowany przez wywołanie notify_one lub notify_all. Może również obudzić się złudnie.

W efekcie druga metoda wykonuje następujący kod.

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

wait_for

Blokuje wątek i ustawia interwał czasu, po którym wątek zostanie odblokowany.

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

Parametry

Lck
Obiekt mutex> unique_lock<.

Rel_time
chrono::duration Obiekt, który określa czas, po jakim wątek się obudzi.

Pred
Dowolne wyrażenie zwracające true wartość lub false.

Wartość zwracana

Pierwsza metoda zwraca cv_status::timeout wartość, jeśli oczekiwanie zakończy się po upływie Rel_time . W przeciwnym razie metoda zwraca cv_status::no_timeoutwartość .

Druga metoda zwraca wartość Pred.

Uwagi

Pierwsza metoda blokuje, dopóki condition_variable obiekt nie zostanie zasygnalizowany przez wywołanie notify_one lub notify_all lub do czasu upływu przedziału czasu Rel_time . Może również obudzić się złudnie.

W efekcie druga metoda wykonuje następujący kod.

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

return true;

wait_until

Blokuje wątek i ustawia maksymalny punkt w czasie, w którym wątek jest odblokowywany.

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

Parametry

Lck
Obiekt mutex> unique_lock<.

Abs_time
Obiekt chrono::time_point .

Pred
Dowolne wyrażenie zwracające true wartość lub false.

Wartość zwracana

Metody zwracające cv_status typ zwracają wartość cv_status::timeout , jeśli oczekiwanie zakończy się po upływie Abs_time . W przeciwnym razie metody zwracają wartość cv_status::no_timeout.

Metody zwracające bool wartość Pred.

Uwagi

Pierwsza metoda blokuje, dopóki condition_variable obiekt nie zostanie zasygnalizowany przez wywołanie notify_onelub notify_all lub do czasu Abs_time. Może również obudzić się złudnie.

W efekcie druga metoda wykonuje następujący kod

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

return true;

Trzecie i czwarte metody używają wskaźnika do obiektu typu xtime w celu zastąpienia chrono::time_point obiektu. Obiekt xtime określa maksymalny czas oczekiwania na sygnał.

Zobacz też

Odwołanie do plików nagłówka
<condition_variable>