Exclusiones mutuas (mutex)

Puede utilizar un objeto Mutex para proporcionar acceso exclusivo a un recurso. La clase Mutex utiliza más recursos del sistema que la clase Monitor, pero pueden calcularse referencias de la misma a través de los límites del dominio de aplicación, puede utilizarse con varias esperas y puede utilizarse para sincronizar subprocesos de distintos procesos. Encontrará una comparación de los mecanismos de sincronización administrados en Información general sobre los primitivos de sincronización.

Para obtener ejemplos de código, consulte la documentación de referencia de los constructores Mutex.

Usar exclusiones mutuas

Un subproceso llama al método WaitOne de una exclusión mutua para solicitar su propiedad. La llamada se bloquea hasta que la exclusión mutua queda disponible o hasta que transcurre el intervalo de tiempo de espera opcional. Si una exclusión mutua no pertenece a ningún subproceso, el estado de la misma se señaliza.

Un subproceso libera una exclusión mutua llamando a su método ReleaseMutex. Las exclusiones mutuas cuentan con afinidad de subproceso; es decir, el subproceso que posee la exclusión mutua es el único que puede liberarla. Si un subproceso libera una exclusión mutua que no posee, se produce una excepción ApplicationException en el subproceso.

Como la clase Mutex se deriva de WaitHandle, también puede llamar al método estático WaitAll o WaitAny de WaitHandle para solicitar la propiedad de Mutex en combinación con otros controladores de espera.

Si un subproceso posee un objeto Mutex, dicho subproceso puede especificar el mismo Mutex en llamadas repetidas de solicitud de espera sin bloquear su ejecución; no obstante, deberá liberar Mutex las veces que sean necesarias para liberar su propiedad.

Exclusiones mutuas abandonadas

Si un subproceso finaliza sin liberar Mutex, la exclusión mutua se considera abandonada. Se trata de un error de programación grave porque el recurso al que protege la exclusión mutua podría quedarse en un estado incoherente. En la versión 2.0 de .NET Framework, se produce una excepción AbandonedMutexException en el siguiente subproceso que adquiere la exclusión mutua.

Nota

En las versiones 1.0 y 1.1 de .NET Framework, un objeto Mutex abandonado se establece en estado señalado y el siguiente subproceso en espera obtiene su propiedad. Si no hay ningún subproceso en espera, Mutex permanece en estado señalado. No se produce ninguna excepción.

Exclusiones mutuas locales y del sistema

Las exclusiones mutuas son de dos tipos: exclusiones mutuas locales y exclusiones mutuas del sistema con nombre. Si crea un objeto Mutex mediante el uso de un constructor que acepta un nombre, quedará asociado a un objeto del sistema operativo con ese nombre. Las exclusiones mutuas del sistema con nombre son visibles en todo el sistema operativo y pueden utilizarse para sincronizar las actividades de los procesos. Puede crear varios objetos Mutex que representen la misma exclusión mutua del sistema con nombre y puede utilizar el método OpenExisting para abrir una exclusión mutua del sistema con nombre existente.

Una exclusión mutua local sólo existe dentro de su proceso. Puede utilizarla cualquier subproceso del proceso que tenga una referencia al objeto Mutex local. Cada objeto Mutex es una exclusión mutua local independiente.

Seguridad de control de acceso para exclusiones mutuas del sistema

La versión 2.0 de .NET Framework proporciona la posibilidad de consultar y establecer seguridad de control de acceso de Windows para los objetos del sistema con nombre. Es recomendable proteger las exclusiones mutuas del sistema desde el momento de su creación porque los objetos del sistema son globales y, por lo tanto, un código distinto del suyo propio es capaz de bloquearlas.

Para obtener información sobre la seguridad de control de acceso para las exclusiones mutuas, vea las clases MutexSecurity y MutexAccessRule, la enumeración MutexRights, los métodos GetAccessControl, SetAccessControl y OpenExisting de la clase Mutex y el constructor Mutex.

Vea también

Referencia

Mutex Class
Mutex
MutexSecurity
MutexAccessRule

Conceptos

Monitores
Subprocesos y subprocesamiento

Otros recursos

Subprocesamiento administrado
Objetos y características de subprocesos