Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.