Condividi tramite


Classe condition_variable

Usare la classe condition_variable per attendere un evento quando si ha un mutex di tipo unique_lock<mutex>. Gli oggetti di questo tipo possono avere prestazioni migliori rispetto agli oggetti di tipo condition_variable_any<unique_lock<mutex>>.

Sintassi

class condition_variable;

Membri

Costruttori

Nome Descrizione
condition_variable Costruisce un oggetto condition_variable.

Funzioni

Nome Descrizione
native_handle Restituisce il tipo specifico per l'implementazione che rappresenta l'handle condition_variable.
notify_all Sblocca tutti i thread in attesa dell'oggetto condition_variable.
notify_one Sblocca uno dei thread in attesa dell'oggetto condition_variable.
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

Costruisce un oggetto condition_variable.

condition_variable();

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.

native_handle

Restituisce il tipo specifico per l'implementazione che rappresenta l'handle condition_variable.

native_handle_type native_handle();

Valore restituito

native_handle_type viene definito come un puntatore a strutture di dati interne di runtime di concorrenza.

notify_all

Sblocca tutti i thread in attesa dell'oggetto condition_variable.

void notify_all() noexcept;

notify_one

Sblocca uno dei thread in attesa dell'oggetto condition_variable.

void notify_one() noexcept;

wait

Blocca un thread.

void wait(unique_lock<mutex>& Lck);

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

Parametri

Lck
Oggetto mutex> unique_lock<.

Pred
Qualsiasi espressione che restituisca un valore true o false.

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

Parametri

Lck
Oggetto mutex> unique_lock<.

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 non viene segnalato da una chiamata a notify_one o notify_all o 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 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);

Parametri

Lck
Oggetto mutex> unique_lock<.

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 che non viene restituito 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.

Vedi anche

Riferimento file di intestazione
<condition_variable>