Exclusões mútuas
Você pode usar um Mutex objeto para fornecer acesso exclusivo a um recurso. The Mutex classe usa mais recursos do sistema que o Monitor classe, mas pode ser empacotado nos limites do domínio do aplicativo, pode ser usado com vários esperas e pode ser usado para sincronizar segmentos em diferentes processos. Para obter uma comparação dos mecanismos de sincronização gerenciado, consulte Visão geral dos primitivos de sincronização.
Para obter exemplos de código, consulte a documentação de referência para o Mutex construtores.
Usando as ' exclusões mútuas '
Um thread chama o WaitOne método de um mutex para solicitam a propriedade. Os blocos de telefonar até que o mutex esteja disponível, ou até o intervalo de tempo limite opcional expirar.O estado de um mutex é sinalizado se nenhum thread proprietário.
Um thread libera um mutex chamando seus ReleaseMutex método. Exclusões mútuas tem afinidade de thread; ou seja, o mutex pode ser liberado somente pelo thread que o possui.Se um thread de liberar um mutex não possui, um ApplicationException é lançada no segmento.
Porque o Mutex classe deriva de WaitHandle, você também pode chamar o estático WaitAll ou WaitAny métodos de WaitHandle a propriedade de solicitação de um Mutex em combinação com outros Aguarde alças.
Se um segmento possui um Mutex, que o thread pode especificar a mesma Mutex em chamadas repetidas de solicitação de espera sem bloquear sua execução; no entanto, ele deve liberar o Mutex quantas vezes para liberar a propriedade.
Exclusões mútuas abandonadas
Se um thread termina sem liberar um Mutex, o mutex é chamado para ser abandonado. Isso geralmente indica um erro grave de programação porque o recurso que está protegendo o mutex pode ser deixado em estado divergente.No .NET estrutura versão 2.0, um AbandonedMutexException é lançada no próximo thread que adquirir o mutex.
Observação: |
---|
Nas versões do .NET estrutura 1.0 e 1.1, um abandonados Mutex definido como o estado sinalizado e a próxima está aguardando o thread obtém propriedade. Se nenhum thread está aguardando, o Mutex permanece em um estado sinalizado. Uma exceção é gerada. |
No caso de um mutex todo o sistema, um mutex abandonado pode indicar que um aplicativo foi finalizado abruptamente (por exemplo, usando o Gerenciador de tarefas do Windows).
Local e exclusões mútuas sistema
' Exclusões mútuas ' são de dois tipos: locais exclusões mútuas e exclusões mútuas sistema nomeado.Se você criar um Mutex usando um construtor que aceita um nome de objeto está associado a um objeto de sistema operacional desse nome. Denominado sistema mutexes são visíveis em todo o sistema operacional e pode ser usados para sincronizar as atividades de processos.Você pode criar vários Mutex objetos que representam a mesma chamada mutex do sistema e você pode usar o OpenExisting método para em em aberto um existente denominado sistema mutex.
Um mutex local existe somente em seu processo.Ele pode ser usado por qualquer segmento do processo que tem uma referência para o local Mutex objeto. Cada Mutex o objeto é um mutex local separado.
Segurança do controle acesso para exclusões mútuas sistema
O .NET estrutura versão 2.0 permite consultar e conjunto a segurança do controle de acesso do Windows para objetos do sistema nomeado.Protegendo o sistema mutexes de no momento da criação de é recomendado porque objetos do sistema são global e, portanto, podem ser bloqueados pelo código que não a sua.
Para obter informações sobre segurança do controle de acesso para exclusões mútuas, consulte o MutexSecurity e MutexAccessRule classes, o MutexRights enumeração, a GetAccessControl, SetAccessControl, e OpenExisting métodos para o Mutex classe e o Mutex(Boolean, String, Boolean%, MutexSecurity) construtor.