Compartilhar via


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.

Confira também

Referência de Arquivos de Cabeçalho
<mutex>