<mutex>
Inclua o cabeçalho padrão <mutex>
para definir as classes mutex
, recursive_mutex
, timed_mutex
e recursive_timed_mutex
; os modelos lock_guard
e unique_lock
; e o os tipos e as funções de suporte que definem as regiões de código de exclusão mútua.
Aviso
Do Visual Studio 2015 em diante, os tipos de sincronização da biblioteca padrão C++ têm como base as primitivas de sincronização do Windows e não usam mais ConcRT (exceto quando a plataforma de destino for Windows XP). Os tipos definidos em <mutex>
não devem ser usados com as funções ou tipos ConcRT.
Requisitos
Cabeçalho: <mutex>
Namespace: std
Comentários
Observação
Em código compilado usando /clr
, esse cabeçalho é bloqueado.
As classes mutex
e recursive_mutex
são tipos mutex. Um tipo mutex tem um construtor padrão e um destruidor que não lançam exceções. Esses objetos têm métodos que propiciam exclusão mútua quando vários threads tentam bloquear o mesmo objeto. Especificamente, um tipo mutex contém os métodos lock
, try_lock
e unlock
:
O método
lock
bloqueia o thread de chamada até que ele tenha obtido a propriedade do mutex. Seu valor retornado é ignorado.O método
try_lock
tenta obter a propriedade do mutex sem bloquear. O valor retornado poderá ser convertido parabool
e serátrue
se o método obtiver propriedade, caso contrário seráfalse
.O método
unlock
libera a propriedade do mutex do thread de chamada.
Você pode usar tipos mutex como argumentos de tipo para instanciar os modelos lock_guard
e unique_lock
. Você pode usar objetos desses tipos, como o argumento Lock
para as funções membro de espera no modelo condition_variable_any
.
Um tipo mutex programado satisfaz os requisitos para um tipo mutex. Além disso, ele tem os métodos try_lock_for
e try_lock_until
que devem ser chamados usando um argumento e devem retornar um tipo que pode ser convertido em bool
. Um tipo de mutex programado pode definir essas funções usando argumentos adicionais, desde que esses argumentos adicionais tenham valores padrão.
O método
try_lock_for
deve ser chamado usando um argumento,Rel_time
, cujo tipo é uma instanciação dechrono::duration
. O método tenta obter a propriedade do mutex, mas retorna no tempo designado peloRel_time
, independentemente do êxito. O valor retornado será convertido paratrue
se o método obtiver a propriedade; caso contrário, o valor retornado será convertido parafalse
.O método
try_lock_until
deve ser chamado usando um argumento,Abs_time
, cujo tipo é uma instanciação dechrono::time_point
. O método tenta obter a propriedade do mutex, mas retorna no tempo designado peloAbs_time
, independentemente do êxito. O valor retornado será convertido paratrue
se o método obtiver a propriedade; caso contrário, o valor retornado será convertido parafalse
.
Um tipo mutex é também conhecido como um tipo bloqueável. Se ele não fornece a função membro try_lock
, é de um tipo bloqueável básico. Um tipo mutex programado é conhecido como um tipo bloqueável programado. Um tipo de bloqueio cronometrado bloqueia por um período especificado ou até que um bloqueio no mutex seja adquirido.
Membros
Classes
Nome | Descrição |
---|---|
Classe lock_guard |
Representa um modelo que pode ser instanciado para criar um objeto cujo destruidor desbloqueia um mutex. |
Classe mutex (Biblioteca Padrão C++) |
Representa um tipo mutex. Use objetos desse tipo para impor a exclusão mútua dentro de um programa. |
Classe recursive_mutex |
Representa um tipo mutex. Em contraste com a classe mutex , o comportamento de chamadas para métodos de bloqueio para objetos que já estão bloqueados é bem definido. |
Classe recursive_timed_mutex |
Use objetos desse tipo para impor a exclusão mútua usando o bloqueio de tempo limite dentro de um programa. Ao contrário de timed_mutex , o efeito de chamar métodos de bloqueio para objetos recursive_timed_mutex é bem definido. |
Classe scoped_lock |
|
Classe timed_mutex |
Use objetos desse tipo para impor a exclusão mútua usando o bloqueio de tempo limite dentro de um programa. |
Classe unique_lock |
Representa um modelo que pode ser instanciado para criar objetos que gerenciam o bloqueio e o desbloqueio de um mutex. |
Funções
Nome | Descrição |
---|---|
call_once |
Fornece um mecanismo para chamar um objeto especificado que pode ser chamado apenas uma vez durante a execução. |
lock |
Tenta bloquear todos os argumentos sem deadlock. |
swap |
Tenta trocar os estados internos de dois objetos mutex , x e y . |
try_lock |
Tenta bloquear o objeto bloqueável. Retorna imediatamente. |
Estruturas
Nome | Descrição |
---|---|
Estrutura adopt_lock_t |
Representa um tipo que é usado para definir um adopt_lock . |
Estrutura defer_lock_t |
Representa um tipo que define um objeto defer_lock que é usado para selecionar um dos construtores sobrecarregados de unique_lock . |
Estrutura once_flag |
Representa um struct que é usado com a função de modelo call_once para garantir que o código de inicialização seja chamado apenas uma vez, mesmo na presença de vários threads de execução. |
Estrutura try_to_lock_t |
Representa um struct que define um objeto try_to_lock que é usado para selecionar um dos construtores sobrecarregados de unique_lock . |
Variáveis
Nome | Descrição |
---|---|
adopt_lock |
Representa um objeto que pode ser passado para construtores para lock_guard e unique_lock para indicar que o objeto mutex que também está sendo passado para o construtor está bloqueado. |
defer_lock |
Representa um objeto que pode ser passado para construtores para unique_lock para indicar que o construtor não deve bloquear o objeto mutex que também está sendo passado para ele. |
try_to_lock |
Representa um objeto que pode ser passado para construtores para unique_lock para indicar que o construtor deve tentar desbloquear o objeto mutex que também está sendo passado para ele sem bloqueio. |