Classe unique_lock
Representa um modelo que pode ser instanciado para criar objetos que gerenciam o bloqueio e o desbloqueio de um mutex
.
Sintaxe
template <class Mutex>
class unique_lock;
Comentários
O argumento de modelo Mutex
deve nomear um tipo mutex.
Internamente, uma unique_lock
armazena um ponteiro para um tipo de mutex
objeto e um bool
que indica se o thread atual possui o mutex
.
Membros
Typedefs públicos
Nome | Descrição |
---|---|
mutex_type |
Sinônimo para o argumento de modelo Mutex . |
Construtores públicos
Nome | Descrição |
---|---|
unique_lock | Constrói um objeto unique_lock . |
Destruidor ~unique_lock | Libera quaisquer recursos que são usados pelo objeto unique_lock . |
Métodos públicos
Nome | Descrição |
---|---|
lock | Bloqueia o thread de chamada até que ele tenha obtido a propriedade do mutex associado. |
mutex | Recupera o ponteiro armazenado para mutex associado. |
owns_lock | Especifica se o thread de chamada possui o mutex associado. |
release | Desassocia o unique_lock objeto do objeto mutex associado. |
troca | Alterna o mutex associado e status de propriedade com um objeto especificado. |
try_lock | Tenta obter a propriedade do mutex associado, sem o bloqueio. |
try_lock_for | Tenta obter a propriedade do mutex associado, sem o bloqueio. |
try_lock_until | Tenta obter a propriedade do mutex associado, sem o bloqueio. |
unlock | Libera a propriedade do mutex associado. |
Operadores públicos
Nome | Descrição |
---|---|
operator bool | Especifica se o thread de chamada tem o mutex associado. |
operator= | Copia o ponteiro mutex armazenado e o status de propriedade associados de um objeto especificado. |
Hierarquia de herança
unique_lock
Requisitos
Cabeçalho:<mutex>
Namespace: std
lock
Bloqueia o thread de chamada até que ele tenha obtido a propriedade do mutex
associado.
void lock();
Comentários
Se o ponteiro mutex
armazenado for NULL, esse método lançará um system_error que tem um código de erro operation_not_permitted
.
Se o thread de chamada já possui mutex
associado, esse método lançará um system_error
que tem um código de erro de resource_deadlock_would_occur
.
Caso contrário, esse método chama lock
no mutex
associado e define o sinalizador de propriedade do thread interno para true
.
mutex
Recupera o ponteiro armazenado para mutex
associado.
mutex_type *mutex() const noexcept;
operator bool
Especifica se o thread de chamada tem o mutex associado.
explicit operator bool() noexcept
Valor de retorno
true
se o thread possui o mutex; Caso contrário, false
.
operator=
Copia o ponteiro mutex
armazenado e o status de propriedade associados de um objeto especificado.
unique_lock& operator=(unique_lock&& Other) noexcept;
Parâmetros
Outras
Um objeto unique_lock
.
Valor de retorno
*this
Comentários
Se o thread de chamada possui o mutex
previamente associado, antes desse método chamar unlock
no mutex
, ele atribui novos valores.
Após a cópia, esse método define Other para um estado construído por padrão.
owns_lock
Especifica se o thread de chamada possui o mutex
associado.
bool owns_lock() const noexcept;
Valor de retorno
true
se o thread possui o mutex
; Caso contrário, false
.
release
Desassocia o unique_lock
objeto do objeto mutex
associado.
mutex_type *release() noexcept;
Valor de retorno
O valor anterior do ponteiro mutex
armazenado.
Comentários
Esse método define o valor de ponteiro mutex
armazenado como 0 e define sinalizador mutex
interno de propriedade para false
.
troca
Alterna o mutex
associado e status de propriedade com um objeto especificado.
void swap(unique_lock& Other) noexcept;
Parâmetros
Outras
Um objeto unique_lock
.
try_lock
Tenta obter a propriedade do mutex
associado, sem o bloqueio.
bool try_lock() noexcept;
Valor de retorno
true
se o método obtiver a propriedade do mutex
com êxito; caso contrário, false
.
Comentários
Se o ponteiro mutex
armazenado for NULL, o método lançará um system_error que tem um código de erro operation_not_permitted
.
Se o thread de chamada já possui o mutex
, esse método lança um system_error
que tem um código de erro de resource_deadlock_would_occur
.
try_lock_for
Tenta obter a propriedade do mutex
associado, sem o bloqueio.
template <class Rep, class Period>
bool try_lock_for(
const chrono::duration<Rep, Period>& Rel_time);
Parâmetros
Rel_time
Um objeto chrono::duration que especifica o tempo máximo que o método tenta obter a propriedade do mutex
.
Valor de retorno
true
se o método obtiver a propriedade do mutex
com êxito; caso contrário, false
.
Comentários
Se o ponteiro mutex
armazenado for NULL, o método lançará um system_error que tem um código de erro operation_not_permitted
.
Se o thread de chamada já possui o mutex
, esse método lança um system_error
que tem um código de erro de resource_deadlock_would_occur
.
try_lock_until
Tenta obter a propriedade do mutex
associado, sem o bloqueio.
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);
Parâmetros
Abs_time
Um ponto no tempo que especifica o limite após o qual o método não tenta mais obter a propriedade do mutex
.
Valor de retorno
true
se o método obtiver a propriedade do mutex
com êxito; caso contrário, false
.
Comentários
Se o ponteiro mutex
armazenado for NULL, o método lançará um system_error que tem um código de erro operation_not_permitted
.
Se o thread de chamada já possui o mutex
, esse método lança um system_error
que tem um código de erro de resource_deadlock_would_occur
.
Construtor unique_lock
Constrói um objeto 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;
Parâmetros
Mtx
Um objeto do tipo mutex.
Rel_time
Um objeto chrono::duration que especifica o tempo máximo que o método tenta obter a propriedade do mutex
.
Abs_time
Um ponto no tempo que especifica o limite após o qual o método não tenta mais obter a propriedade do mutex
.
Outras
Um objeto unique_lock
.
Comentários
O primeiro construtor constrói um objeto que tem um valor de ponteiro mutex associado de 0.
O segundo construtor move o status mutex associado de Other. Após a movimentação, Other não está associado a um mutex.
Os construtores restantes armazenam & Mtx como o ponteiro armazenado mutex
. Propriedade do mutex
será determinada pelo segundo argumento, se ele existir.
Nome | Descrição |
---|---|
No argument |
Propriedade é obtida chamando o método de lock no objeto mutex associado. |
Adopt |
Propriedade será assumida. Mtx deve ser bloqueado quando esse construtor for chamado. |
Defer |
O thread de chamada é presumido como não possuindo o objeto mutex . Mtx não deve ser bloqueado quando esse construtor for chamado. |
Try |
Propriedade é obtida chamando try_lock no objeto mutex associado. O construtor não lança nada. |
Rel_time |
Propriedade é determinada pela chamada de try_lock_for(Rel_time) . |
Abs_time |
Propriedade é determinada pela chamada de try_lock_until(Abs_time) . |
Destruidor ~unique_lock
Libera quaisquer recursos que são usados pelo objeto unique_lock
.
~unique_lock() noexcept;
Comentários
Se o thread de chamada possui mutex
associado, o destruidor libera a propriedade chamando desbloqueio no objeto mutex
.
desbloquear
Libera a propriedade do mutex
associado.
void unlock();
Comentários
Se o thread de chamada não possui mutex
associado, esse método lança um system_error que tem um código de erro de operation_not_permitted
.
Caso contrário, esse método chama unlock
no mutex
associado e define o sinalizador de propriedade do thread interno para false
.