Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Mutex (Clase)

Primitiva de sincronización que puede usarse también para la sincronización entre procesos.

Espacio de nombres:  System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public sealed class Mutex : WaitHandle

El tipo Mutex expone los siguientes miembros.

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMutex()Inicializa una nueva instancia de la clase Mutex con propiedades predeterminadas.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMutex(Boolean)Inicializa una nueva instancia de la clase Mutex con un valor booleano que indica si el subproceso que realiza la llamada debe tener la propiedad inicial de la exclusión mutua.
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMutex(Boolean, String)Inicializa una nueva instancia de la clase Mutex con un valor booleano que indica si el subproceso que realiza la llamada debe tener la propiedad inicial de la exclusión mutua, y una cadena que representa el nombre de la exclusión mutua.
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMutex(Boolean, String, Boolean)Inicializa una nueva instancia de la clase Mutex con un valor booleano que indica si el subproceso que realiza la llamada debe tener la propiedad inicial de la exclusión mutua, una cadena que es el nombre de la exclusión mutua y un valor booleano que, cuando se devuelva el método, indicará si se le ha concedido la propiedad inicial de la exclusión mutua al subproceso que realiza la llamada.
Método públicoMutex(Boolean, String, Boolean, MutexSecurity)Inicializa una nueva instancia de la clase Mutex con un valor booleano que indica si el subproceso que realiza la llamada debe tener la propiedad inicial de la exclusión mutua, una cadena que es el nombre de la exclusión mutua y una variable booleana que, cuando se devuelva el método, indicará si se le ha concedido la propiedad inicial de la exclusión mutua al subproceso que realiza la llamada.
Arriba

  NombreDescripción
Propiedad públicaCompatible con XNA FrameworkHandle Obsoleto. Obtiene o establece el identificador del sistema operativo nativo. (Se hereda de WaitHandle).
Propiedad públicaSafeWaitHandleObtiene o establece el identificador del sistema operativo nativo. (Se hereda de WaitHandle).
Arriba

  NombreDescripción
Método públicoCompatible con XNA FrameworkClose Cuando se sobrescribe en una clase derivada, libera todos los recursos mantenidos por el WaitHandle actual. (Se hereda de WaitHandle).

In XNA Framework, este miembro está invalidado por Close().
Método públicoCreateObjRefCrea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto. (Se hereda de MarshalByRefObject).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsDispose()Libera todos los recursos usados por la instancia actual de la clase WaitHandle. (Se hereda de WaitHandle).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método públicoGetAccessControlObtiene un objeto MutexSecurity que representa la seguridad de control de acceso para la exclusión mutua con nombre.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetLifetimeServiceRecupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia. (Se hereda de MarshalByRefObject).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetType Obtiene el Typede la instancia actual. (Se hereda de Object).
Método públicoInitializeLifetimeServiceObtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia. (Se hereda de MarshalByRefObject).
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsOpenExisting(String)Abre la exclusión mutua con nombre especificada, si ya existe.
Método públicoMiembro estáticoOpenExisting(String, MutexRights)Abre la exclusión mutua con nombre especificada, si ya existe, con el acceso de seguridad deseado.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsReleaseMutexLibera Mutex una sola vez.
Método públicoSetAccessControlEstablece la seguridad de control de acceso para una exclusión mutua del sistema con nombre.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Método públicoMiembro estáticoCompatible con .NET para aplicaciones de la Tienda WindowsTryOpenExisting(String, Mutex)Abre la exclusión mutua con nombre especificada, si ya existe, y devuelve un valor que indica si la operación se realizó correctamente.
Método públicoMiembro estáticoTryOpenExisting(String, MutexRights, Mutex)Abre la exclusión mutua con nombre especificada, si ya existe, con el acceso de seguridad deseado, y devuelve un valor que indica si la operación se realizó correctamente.
Método públicoCompatible con XNA FrameworkWaitOne()Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal. (Se hereda de WaitHandle).

In XNA Framework, este miembro está invalidado por WaitOne().
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsWaitOne(Int32)Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal, utilizando un entero de 32 bits con signo para especificar el intervalo de tiempo. (Se hereda de WaitHandle).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsWaitOne(TimeSpan)Bloquea el subproceso actual hasta que la instancia actual recibe una señal, utilizando TimeSpan para especificar el intervalo de tiempo. (Se hereda de WaitHandle).
Método públicoCompatible con XNA FrameworkWaitOne(Int32, Boolean)Bloquea el subproceso actual hasta que el objeto WaitHandle actual recibe una señal, utilizando un entero de 32 bits con signo para especificar el intervalo de tiempo y especificando si hay que salir del dominio de sincronización antes de la espera. (Se hereda de WaitHandle).

In XNA Framework, este miembro está invalidado por WaitOne(Int32, Boolean).
Método públicoWaitOne(TimeSpan, Boolean)Bloquea el subproceso actual hasta que la instancia actual recibe una señal, utilizando TimeSpan para especificar el intervalo de tiempo y especificando si hay que abandonar el dominio de sincronización antes de la espera. (Se hereda de WaitHandle).
Arriba

  NombreDescripción
Implementación explícita de interfacesMétodo privadoCompatible con XNA FrameworkIDisposable.DisposeInfraestructura. Libera todos los recursos utilizados por WaitHandle. (Se hereda de WaitHandle).
Arriba

Cuando dos o más subprocesos tienen que obtener acceso a un recurso compartido al mismo tiempo, el sistema necesita un mecanismo de sincronización para garantizar que solo uno de los subprocesos utilice el recurso en ese momento. Mutex es un primitiva de sincronización que permite el acceso exclusivo al recurso compartido solo para un subproceso. Cuando un subproceso adquiere una exclusión mutua (mutex), el siguiente subproceso que intenta adquirir dicha exclusión mutua se suspende hasta que el primer subproceso libera la exclusión mutua.

Para solicitar la propiedad de una exclusión mutua puede utilizar el método WaitHandle.WaitOne. El subproceso que posee una exclusión mutua puede solicitar la misma exclusión mutua en llamadas repetidas a WaitOne sin bloquear su ejecución. Sin embargo, el subproceso debe llamar al método ReleaseMutex el mismo número de veces para liberar la propiedad de la exclusión mutua. La clase Mutex exige la identidad del subproceso, por lo que sólo podrá liberar la exclusión mutua el subproceso que la adquirió. Por el contrario, la clase Semaphore no exige la identidad del subproceso.

Si un subproceso finaliza mientras posee una exclusión mutua, se dice que la exclusión mutua está abandonada. El estado de la exclusión mutua se establece en señalado y el siguiente subproceso en espera pasa a ser su propietario. A partir de la versión 2.0 de .NET Framework, se inicia AbandonedMutexException en el siguiente subproceso que adquiere la exclusión mutua abandonada. En las versiones de .NET Framework anteriores a la 2.0, no se producía ninguna excepción.

Nota de precauciónPrecaución

Una exclusión mutua abandonada suele indicar un error grave en el código. Cuando un subproceso sale sin liberar la exclusión mutua, el estado de las estructuras de datos protegidas por la exclusión mutua podría no ser coherente. El siguiente subproceso que solicita la propiedad de la exclusión mutua puede controlar esta excepción y continuar si se puede comprobar la integridad de las estructuras de datos.

En el caso de una exclusión mutua en todo el sistema, una exclusión mutua abandonada podría indicar que una aplicación ha finalizado de forma abrupta (por ejemplo, mediante el Administrador de tareas de Windows).

Las exclusiones mutuas son de dos tipos: exclusiones mutuas locales, sin nombre, y exclusiones mutuas del sistema con nombre. Una exclusión mutua local sólo existe dentro de su proceso. La puede usar cualquier subproceso del proceso que contenga una referencia al objeto Mutex que la representa. Cada objeto Mutex sin nombre representa una exclusión mutua local independiente.

Las exclusiones mutuas del sistema con nombre son visibles en todo el sistema operativo y se pueden utilizar para sincronizar las actividades de los procesos. Puede crear un objeto Mutex que representa una exclusión mutua del sistema con nombre mediante el uso de un constructor que acepte un nombre. Se puede crear el objeto de sistema operativo al mismo tiempo o puede existir antes de la creación del objeto Mutex. 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.

NotaNota

En un servidor en el que se ejecuta Terminal Services, una exclusión mutua del sistema con nombre puede tener dos niveles de visibilidad. Si su nombre empieza por el prefijo "Global\", la exclusión mutua se ve en todas las sesiones de Terminal Server. Si su nombre empieza por el prefijo "Local\", la exclusión mutua se ve sólo en la sesión de Terminal Server en la que se creó. En ese caso, puede existir una exclusión mutua independiente con el mismo nombre en todas las sesiones de Terminal Server del servidor. Si no especifica ningún prefijo al crear una exclusión mutua con nombre, toma el prefijo "Local\". En una sesión de Terminal Server, dos exclusiones mutuas cuyos nombres se diferencian sólo por sus prefijos son exclusiones mutuas independientes y las ven todos los procesos de la sesión de Terminal Server. Es decir, los nombres de prefijo "Global\" y "Local\" describen el ámbito del nombre de la exclusión mutua respecto a las sesiones de Terminal Server, y no respecto a los procesos.

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el valor de propiedad Resources siguiente: Synchronization | ExternalThreading. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

En este ejemplo se muestra cómo utilizar un objeto Mutex local para sincronizar el acceso a un recurso protegido.


// This example shows how a Mutex is used to synchronize access
// to a protected resource. Unlike Monitor, Mutex can be used with
// WaitHandle.WaitAll and WaitAny, and can be passed across
// AppDomain boundaries.

using System;
using System.Threading;

class Test
{
    // Create a new Mutex. The creating thread does not own the
    // Mutex.
    private static Mutex mut = new Mutex();
    private const int numIterations = 1;
    private const int numThreads = 3;

    static void Main()
    {
        // Create the threads that will use the protected resource.
        for(int i = 0; i < numThreads; i++)
        {
            Thread myThread = new Thread(new ThreadStart(MyThreadProc));
            myThread.Name = String.Format("Thread{0}", i + 1);
            myThread.Start();
        }

        // The main thread exits, but the application continues to
        // run until all foreground threads have exited.
    }

    private static void MyThreadProc()
    {
        for(int i = 0; i < numIterations; i++)
        {
            UseResource();
        }
    }

    // This method represents a resource that must be synchronized
    // so that only one thread at a time can enter.
    private static void UseResource()
    {
        // Wait until it is safe to enter.
        mut.WaitOne();

        Console.WriteLine("{0} has entered the protected area", 
            Thread.CurrentThread.Name);

        // Place code to access non-reentrant resources here.

        // Simulate some work.
        Thread.Sleep(500);

        Console.WriteLine("{0} is leaving the protected area\r\n", 
            Thread.CurrentThread.Name);

        // Release the Mutex.
        mut.ReleaseMutex();
    }
}


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Este tipo es seguro para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft