Condividi tramite


Classe condition_variable_any

Usare la classe condition_variable_any per l'attesa di un evento che ha un qualsiasi tipo mutex.

Sintassi

class condition_variable_any;

Membri

Costruttori

Nome Descrizione
condition_variable_any Costruisce un oggetto condition_variable_any.

Funzioni

Nome Descrizione
notify_all Sblocca tutti i thread in attesa dell'oggetto condition_variable_any.
notify_one Sblocca uno dei thread in attesa dell'oggetto condition_variable_any.
aspettare Blocca un thread.
wait_for Blocca un thread e imposta un intervallo di tempo dopo il quale il thread viene sbloccato.
wait_until Blocca un thread e imposta un tempo massimo dopo il quale il thread viene sbloccato.

condition_variable_any

Costruisce un oggetto condition_variable_any.

condition_variable_any();

Osservazioni:

Se non è disponibile memoria sufficiente, il costruttore genera un oggetto system_error che ha un codice di errore not_enough_memory. Se l'oggetto non può essere costruito perché non è disponibile un'altra risorsa, il costruttore genera un oggetto system_error che ha un codice di errore resource_unavailable_try_again.

notify_all

Sblocca tutti i thread in attesa dell'oggetto condition_variable_any.

void notify_all() noexcept;

notify_one

Sblocca uno dei thread in attesa dell'oggetto condition_variable_any.

void notify_one() noexcept;

wait

Blocca un thread.

template <class Lock>
void wait(Lock& Lck);

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

Parametri

Lck
Un oggetto mutex di qualsiasi tipo.

Pred
Qualsiasi espressione che restituisca un valore true o false.

Osservazioni:

Il primo metodo si blocca fino a quando l'oggetto condition_variable_any non viene segnalato da una chiamata a notify_one o notify_all. Può anche riattivarsi in modo spurio.

Il secondo metodo esegue il codice seguente.

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

wait_for

Blocca un thread e imposta un intervallo di tempo dopo il quale il thread viene sbloccato.

template <class Lock, class Rep, class Period>
bool wait_for(Lock& Lck, const chrono::duration<Rep, Period>& Rel_time);

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

Parametri

Lck
Un oggetto mutex di qualsiasi tipo.

Rel_time
Un oggetto chrono::duration che specifica la quantità di tempo prima che il thread venga riattivato.

Pred
Qualsiasi espressione che restituisca un valore true o false.

Valore restituito

Il primo metodo restituisce cv_status::timeout se l'attesa termina quando Rel_time è trascorso. In caso contrario, il metodo restituisce cv_status::no_timeout.

Il secondo metodo restituisce il valore di Pred.

Osservazioni:

Il primo metodo si blocca finché l'oggetto condition_variable_any non viene segnalato da una chiamata a notify_one o notify_all oppure fino a quando non è trascorso l'intervallo di tempo Rel_time. Può anche riattivarsi in modo spurio.

Il secondo metodo esegue il codice seguente.

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

return true;

wait_until

Blocca un thread e imposta un tempo massimo dopo il quale il thread viene sbloccato.

template <class Lock, class Clock, class Duration>
void wait_until(Lock& Lck, const chrono::time_point<Clock, Duration>& Abs_time);

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

template <class Lock>
void wait_until(Lock Lck, const xtime* Abs_time);

template <class Lock, class Predicate>
void wait_until(
    Lock Lck,
    const xtime* Abs_time,
    Predicate Pred);

Parametri

Lck
Un oggetto mutex.

Abs_time
Un oggetto chrono:: time_point.

Pred
Qualsiasi espressione che restituisca un valore true o false.

Valore restituito

I metodi che restituiscono un cv_status tipo restituiscono cv_status::timeout se l'attesa termina quando Abs_time trascorso. In caso contrario, i metodi restituiscono cv_status::no_timeout.

Metodi che restituiscono un bool valore restituito da Pred.

Osservazioni:

Il primo metodo si blocca fino a quando l'oggetto condition_variable non viene segnalato da una chiamata a notify_one o notify_all oppure fino a Abs_time. Può anche riattivarsi in modo spurio.

Il secondo metodo esegue il codice seguente.

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

return true;

Il terzo e il quarto metodo usano un puntatore a un oggetto di tipo xtime per sostituire l'oggetto chrono::time_point. L'oggetto xtime specifica il tempo massimo di attesa di un segnale.