<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 para bool 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 de chrono::duration. O método tenta obter a propriedade do mutex, mas retorna no tempo designado pelo Rel_time, independentemente do êxito. O valor retornado será convertido para true se o método obtiver a propriedade; caso contrário, o valor retornado será convertido para false.

  • O método try_lock_until deve ser chamado usando um argumento, Abs_time, cujo tipo é uma instanciação de chrono::time_point. O método tenta obter a propriedade do mutex, mas retorna no tempo designado pelo Abs_time, independentemente do êxito. O valor retornado será convertido para true se o método obtiver a propriedade; caso contrário, o valor retornado será convertido para false.

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.

Confira também

Referência de Arquivos de Cabeçalho