Compartilhar via


Classe CMutex

Representa um mutex, que é um objeto de sincronização que permite um acesso mutuamente exclusivo de thread a um recurso.

Sintaxe

class CMutex : public CSyncObject

Membros

Construtores públicos

Nome Descrição
CMutex::CMutex Constrói um objeto CMutex.

Comentários

Os mutexes são úteis quando pode ser permitido modificar dados ou algum outro recurso controlado a apenas um thread por vez. Por exemplo, adicionar nós a uma lista vinculada é um processo que só deve ser permitido a um thread por vez. Ao usar um objeto CMutex para controlar a lista vinculada, apenas um thread por vez poderá obter acesso à lista.

Para usar um objeto CMutex, construa o objeto CMutex quando for necessário. Especifique o nome do mutex que você deseja que aguarde, e que deve ficar inicialmente sob posse do seu aplicativo. Em seguida, você pode acessar o evento quando o construtor retornar. Chame CSyncObject::Unlock quando terminar de acessar o recurso controlado.

Um método alternativo para usar objetos CMutex é adicionar uma variável de tipo CMutex como um membro de dados à classe que você deseja controlar. Durante a construção do objeto controlado, chame o construtor do membro de dados CMutex especificando se o mutex ficará inicialmente sob posse, o nome do mutex (se ele for usado além dos limites do processo) e os atributos de segurança desejados.

Para acessar recursos controlados por objetos CMutex dessa maneira, primeiro crie uma variável do tipo CSingleLock ou do tipo CMultiLock na função de membro de acesso do recurso. Em seguida, chame a função do membro Lock do objeto de bloqueio (por exemplo, CSingleLock::Lock). Neste ponto, o thread terá acesso ao recurso, aguardará a liberação do recurso e obterá acesso ou aguardará o recurso ser liberado e o tempo limite, não obtendo acesso ao recurso. De qualquer forma, seu recurso foi acessado de maneira thread-safe. Para liberar o recurso, use a função do membro Unlock do objeto de bloqueio (por exemplo, CSingleLock::Unlock) ou permita que o objeto de bloqueio fique fora do escopo.

Para mais informações sobre como usar objetos CMutex, confira o artigo Multithreading: como usar as classes de sincronização.

Hierarquia de herança

CObject

CSyncObject

CMutex

Requisitos

Cabeçalho: afxmt.h

CMutex::CMutex

Constrói um objeto CMutex nomeado ou sem nome.

CMutex(
    BOOL bInitiallyOwn = FALSE,
    LPCTSTR lpszName = NULL,
    LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);

Parâmetros

bInitiallyOwn
Especifica se o thread que cria o objeto CMutex inicialmente tem acesso ao recurso controlado pelo mutex.

lpszName
Nome do objeto de CMutex . Se existir outro mutex com o mesmo nome, lpszName deverá ser fornecido se o objeto for usado entre os limites do processo. Se NULL, o mutex não terá nome. Se o nome corresponder a um mutex existente, o construtor criará um novo objeto CMutex que referencia o mutex desse nome. Se o nome corresponder a um objeto de sincronização existente que não é um mutex, a construção falhará.

lpsaAttribute
Atributos de segurança para o objeto mutex. Para obter uma descrição completa dessa estrutura, consulte SECURITY_ATTRIBUTES no SDK do Windows.

Comentários

Para acessar ou liberar um objeto CMutex, crie um objeto CMultiLock ou CSingleLock e chame suas funções de membro Bloquear e Desbloquear. Se o objeto CMutex estiver sendo usado de maneira autônoma, chame sua função membro Unlock para liberá-lo.

Importante

Depois de criar objeto CMutex, use GetLastError para garantir que o mutex ainda não exista. Se o mutex existiu inesperadamente, isso pode indicar que um processo desonesto está em squatting e pode estar pretendendo usar o mutex maliciosamente. Nesse caso, o procedimento recomendado consciente da segurança é fechar o identificador e continuar como se houvesse uma falha na criação do objeto.

Confira também

Classe CSyncObject
Gráfico da hierarquia