Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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;
Elementy członkowskie
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_one lub 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ł.