Compartilhar via


Exclusões mútuas

Você pode usar um Mutex o objeto para fornecer acesso exclusivo a um recurso. O Mutex classe usa mais recursos de sistema que o Monitor classe, mas ele pode ser empacotado limites de domínio de aplicativo, ele pode ser usado com vários aguarda, e pode ser usado para sincronizar segmentos em processos diferentes. 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 o método de um mutex para solicitar a propriedade. Os blocos de chamada 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 ele pertence.

Um segmento libera um mutex chamando seu ReleaseMutex método. Exclusões mútuas tenham afinidade de segmento; ou seja, o mutex pode ser liberado somente pelo thread que o possui. Se um segmento libera um mutex não proprietário, um ApplicationException é lançada no segmento.

Porque o Mutex classe deriva de WaitHandle, você também pode chamar estática WaitAll ou WaitAny métodos de WaitHandle a propriedade de solicitação de um Mutex em combinação com outros identificadores de espera.

Se um segmento possui um Mutex, que o thread pode especificar a mesma Mutex em chamadas de solicitação repetida de espera sem bloquear sua execução; No entanto, deve liberar o Mutex quantas vezes para liberar a propriedade.

Mutexes abandonadas

Se um segmento termina sem liberar uma Mutex, mutex é considerado abandonado. Isso geralmente indica um erro grave de programação porque o recurso que está protegendo o mutex pode ser deixado em estado inconsistente. No.NET Framework versão 2.0, um AbandonedMutexException é lançada no próximo segmento que adquire o mutex.

Observação

No.NET Framework versões 1.0 e 1.1, um abandonadas Mutex está definida para o estado sinalizado e a próxima espera thread obtém propriedade.Se nenhum thread está aguardando, o Mutex permanece no estado sinalizado.Nenhuma exceção é gerada.

No caso de um mutex geral de sistema, um mutex abandonado pode indicar que um aplicativo foi finalizado abruptamente (por exemplo, usando o gerenciador de tarefas do Windows).

Local e o sistema Mutexes

Os mutexes são de dois tipos: local mutexes e semáforos de exclusão mútua sistema nomeado. Se você criar um Mutex usando um construtor que aceita um nome de objeto é associado um objeto do sistema operacional do 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árias Mutex objetos que representam a mesma chamada mutex do sistema e você pode usar o OpenExisting método para abrir um mutex nomeado sistema existente.

Um mutex local existe somente em seu processo. Ele pode ser usado por qualquer segmento do processo que tem uma referência ao local de Mutex objeto. Cada Mutex o objeto é um mutex local separado.

Segurança de controle de acesso para o sistema Mutexes

A.NET Framework versão 2.0 fornece a capacidade de consultar e definir a segurança de controle de acesso do Windows para objetos do sistema nomeado. Proteger o sistema mutexes desde o momento de criação é recomendada porque os objetos de sistema são globais e, portanto, podem ser bloqueados pelo código que não a sua.

Para obter informações sobre a segurança de 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 da Mutex classe e o Mutex(Boolean, String, Boolean, MutexSecurity) construtor.

Consulte também

Referência

Mutex

Mutex

MutexSecurity

MutexAccessRule

Conceitos

Monitores

Segmentos e Threading

Outros recursos

Threads gerenciadas

Threading objetos e recursos