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
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.