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.