Condividi tramite


Classe unique_lock

Rappresenta un modello di cui è possibile creare un’istanza per la creazione di oggetti che gestiscono il blocco e lo sblocco di un tipo mutex.

Sintassi

template <class Mutex>
class unique_lock;

Osservazioni:

L'argomento del modello Mutex deve denominare un tipo mutex.

A livello interno, un oggetto unique_lock archivia un puntatore a un oggetto mutex associato e a un oggetto bool che indica se il thread corrente è proprietario dell'oggetto mutex.

Membri

Typedef pubblici

Nome Descrizione
mutex_type Sinonimo dell'argomento di modello Mutex.

Costruttori pubblici

Nome Descrizione
unique_lock Costruisce un oggetto unique_lock.
~unique_lock Destructor Rilascia qualsiasi risorsa associata all'oggetto unique_lock.

Metodi pubblici

Nome Descrizione
lock Blocca il thread di chiamata finché questo non ottiene la proprietà dell'oggetto mutex associato.
mutex Recupera un puntatore all'oggetto mutex associato.
owns_lock Specifica se il thread di chiamata è proprietario dell'oggetto mutex associato.
release Dissocia l'oggetto unique_lock dall'oggetto mutex associato.
swap Scambia l'oggetto mutex associato e lo stato di proprietà con un oggetto specificato e il relativo stato.
try_lock Tenta di ottenere la proprietà dell'elemento mutex associato senza bloccare.
try_lock_for Tenta di ottenere la proprietà dell'elemento mutex associato senza bloccare.
try_lock_until Tenta di ottenere la proprietà dell'elemento mutex associato senza bloccare.
unlock Rilascia la proprietà dell'oggetto mutex associato.

Operatori pubblici

Nome Descrizione
operator bool Specifica se il thread di chiamata è proprietario dell'oggetto mutex associato.
operator= Copia il puntatore mutex archiviato e lo stato di proprietà associato da un oggetto specificato.

Gerarchia di ereditarietà

unique_lock

Requisiti

Header:<mutex>

Spazio dei nomi: std

lock

Blocca il thread di chiamata finché questo non ottiene la proprietà dell'oggetto mutex associato.

void lock();

Osservazioni:

Se il puntatore archiviato mutex è NULL, questo metodo genera un system_error con codice di errore .operation_not_permitted

Se il thread di chiamata è già proprietario dell'oggetto mutex associato, questo metodo genera un system_error con codice di errore resource_deadlock_would_occur.

In caso contrario, questo metodo chiama il metodo lock sull'oggetto mutex associato e imposta il flag interno di proprietà del thread su true.

mutex

Recupera un puntatore all'oggetto mutex associato.

mutex_type *mutex() const noexcept;

operator bool

Specifica se il thread di chiamata è proprietario dell'oggetto mutex associato.

explicit operator bool() noexcept

Valore restituito

true se il thread è proprietario dell'oggetto mutex; in caso contrario, false.

operator=

Copia il puntatore mutex archiviato e lo stato di proprietà associato da un oggetto specificato.

unique_lock& operator=(unique_lock&& Other) noexcept;

Parametri

Altro
Oggetto unique_lock.

Valore restituito

*this

Osservazioni:

Se il thread di chiamata è proprietario dell'oggetto mutex associato in precedenza, prima di chiamare il metodo unlock sull'oggetto mutex assegna i nuovi valori.

Dopo la copia, questo metodo imposta Other su uno stato costruito predefinito.

owns_lock

Specifica se il thread di chiamata è proprietario dell'oggetto mutex associato.

bool owns_lock() const noexcept;

Valore restituito

true se il thread è proprietario dell'oggetto mutex; in caso contrario, false.

release

Dissocia l'oggetto unique_lock dall'oggetto mutex associato.

mutex_type *release() noexcept;

Valore restituito

Valore precedente del puntatore mutex archiviato.

Osservazioni:

Questo metodo imposta in valore del puntatore mutex archiviato su 0 e il flag interno di proprietà dell'oggetto mutex su false.

scambio

Scambia l'oggetto mutex associato e lo stato di proprietà con un oggetto specificato e il relativo stato.

void swap(unique_lock& Other) noexcept;

Parametri

Altro
Oggetto unique_lock.

try_lock

Tenta di ottenere la proprietà dell'elemento mutex associato senza bloccare.

bool try_lock() noexcept;

Valore restituito

true se il metodo ottiene correttamente la proprietà di mutex; in caso contrario, false.

Osservazioni:

Se il puntatore archiviato mutex è NULL, il metodo genera un system_error con codice di errore .operation_not_permitted

Se il thread di chiamata è già proprietario dell'oggetto mutex, il metodo genera un system_error con codice di errore resource_deadlock_would_occur.

try_lock_for

Tenta di ottenere la proprietà dell'elemento mutex associato senza bloccare.

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

Parametri

Rel_time
Oggetto chrono::duration che specifica il periodo di tempo massimo per cui il metodo può tentare di ottenere la proprietà del mutex.

Valore restituito

true se il metodo ottiene correttamente la proprietà di mutex; in caso contrario, false.

Osservazioni:

Se il puntatore archiviato mutex è NULL, il metodo genera un system_error con codice di errore .operation_not_permitted

Se il thread di chiamata è già proprietario dell'oggetto mutex, il metodo genera un system_error con codice di errore resource_deadlock_would_occur.

try_lock_until

Tenta di ottenere la proprietà dell'elemento mutex associato senza bloccare.

template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& Abs_time);

bool try_lock_until(const xtime* Abs_time);

Parametri

Abs_time
Momento specifico che indica la soglia oltre la quale il metodo non tenta più di ottenere la proprietà di mutex.

Valore restituito

true se il metodo ottiene correttamente la proprietà di mutex; in caso contrario, false.

Osservazioni:

Se il puntatore archiviato mutex è NULL, il metodo genera un system_error con codice di errore .operation_not_permitted

Se il thread di chiamata è già proprietario dell'oggetto mutex, il metodo genera un system_error con codice di errore resource_deadlock_would_occur.

unique_lock Constructor

Costruisce un oggetto unique_lock.

unique_lock() noexcept;
unique_lock(unique_lock&& Other) noexcept;
explicit unique_lock(mutex_type& Mtx);

unique_lock(mutex_type& Mtx, adopt_lock_t Adopt);

unique_lock(mutex_type& Mtx, defer_lock_t Defer) noexcept;
unique_lock(mutex_type& Mtx, try_to_lock_t Try);

template <class Rep, class Period>
unique_lock(mutex_type& Mtx,
    const chrono::duration<Rep, Period>
Rel_time);

template <class Clock, class Duration>
unique_lock(mutex_type& Mtx,
    const chrono::time_point<Clock, Duration>
Abs_time);

unique_lock(mutex_type& Mtx,
    const xtime* Abs_time) noexcept;

Parametri

Mtx
Oggetto di tipo mutex.

Rel_time
Oggetto chrono::duration che specifica il periodo di tempo massimo per cui il metodo può tentare di ottenere la proprietà del mutex.

Abs_time
Momento specifico che indica la soglia oltre la quale il metodo non tenta più di ottenere la proprietà di mutex.

Altro
Oggetto unique_lock.

Osservazioni:

Il primo costruttore crea un oggetto con un valore del puntatore mutex associato pari a 0.

Il secondo costruttore sposta lo stato mutex associato da Other. Dopo lo spostamento, Other non è più associato a un mutex.

I costruttori rimanenti archivia e Mtx come puntatore archiviato mutex . La proprietà dell'oggetto mutex è determinata dal secondo argomento, se esistente.

Nome Descrizione
No argument La proprietà viene ottenuta mediante una chiamata al metodo lock sull'oggetto mutex associato.
Adopt Si presuppone la proprietà. Quando viene chiamato il costruttore, Mtx deve essere bloccato.
Defer Si presuppone che il thread di chiamata non sia proprietario dell'oggetto mutex. Quando viene chiamato il costruttore, Mtx non deve essere bloccato.
Try La proprietà viene determinata mediante una chiamata al metodo try_lock sull'oggetto mutex associato. Il costruttore non esegue alcuna operazione.
Rel_time La proprietà viene determinata mediante una chiamata al metodo try_lock_for(Rel_time).
Abs_time La proprietà viene determinata mediante una chiamata al metodo try_lock_until(Abs_time).

~unique_lock Destructor

Rilascia qualsiasi risorsa associata all'oggetto unique_lock.

~unique_lock() noexcept;

Osservazioni:

Se il thread di chiamata è proprietario dell'oggetto mutex associato, il distruttore rilascia la proprietà mediante una chiamata al metodo unlock sull'oggetto mutex.

unlock

Rilascia la proprietà dell'oggetto mutex associato.

void unlock();

Osservazioni:

Se il thread di chiamata non è proprietario dell'oggetto mutex associato, questo metodo genera un system_error con codice di errore operation_not_permitted.

In caso contrario, questo metodo chiama il metodo unlock sull'oggetto mutex associato e imposta il flag interno di proprietà del thread su false.

Vedi anche

Riferimento file di intestazione
<mutex>