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
.