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

Monitor (Clase)

Proporciona un mecanismo que sincroniza el acceso a los objetos.

System::Object
  System.Threading::Monitor

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

[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public ref class Monitor abstract sealed

El tipo Monitor expone los siguientes miembros.

  NombreDescripción
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEnter(Object)Adquiere un bloqueo exclusivo en el objeto especificado.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEnter(Object, Boolean%)Adquiere un bloqueo exclusivo en el objeto especificado y establece de forma atómica un valor que indica si se realizó el bloqueo.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExitLibera un bloqueo exclusivo en el objeto especificado.
Método públicoMiembro estáticoCompatible con .NET para aplicaciones de la Tienda WindowsIsEnteredDetermina si el subproceso actual mantiene el bloqueo en el objeto especificado.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPulseNotifica un cambio de estado del objeto bloqueado al subproceso que se encuentra en la cola de espera.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPulseAllNotifica un cambio de estado del objeto a todos los subprocesos que se encuentran en espera.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsTryEnter(Object)Intenta adquirir un bloqueo exclusivo en el objeto especificado.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsTryEnter(Object, Boolean%)Intenta adquirir un bloqueo exclusivo en el objeto especificado y establece de forma atómica un valor que indica si se realizó el bloqueo.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsTryEnter(Object, Int32)Intenta adquirir un bloqueo exclusivo en el objeto especificado durante el número de segundos especificado.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsTryEnter(Object, TimeSpan)Intenta adquirir un bloqueo exclusivo en el objeto especificado durante el período de tiempo especificado.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsTryEnter(Object, Int32, Boolean%)Intenta, durante el número especificado de milisegundos, adquirir un bloqueo exclusivo en el objeto especificado y establece de forma atómica un valor que indica si se realizó el bloqueo.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsTryEnter(Object, TimeSpan, Boolean%)Intenta, durante el periodo de tiempo indicado, adquirir un bloqueo exclusivo en el objeto especificado y establece de forma atómica un valor que indica si se realizó el bloqueo.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsWait(Object)Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsWait(Object, Int32)Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsWait(Object, TimeSpan)Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos.
Método públicoMiembro estáticoWait(Object, Int32, Boolean)Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos. Este método también especifica si el dominio de sincronización del contexto (si se trata de un contexto sincronizado) sale antes de la espera y vuelve a adquirir el bloqueo después.
Método públicoMiembro estáticoWait(Object, TimeSpan, Boolean)Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos. De modo opcional, sale del dominio de sincronización del contexto sincronizado antes de la espera y vuelve a adquirir el dominio después.
Arriba

La clase Monitor controla el acceso a los objetos, concediendo un bloqueo para un objeto a un único subproceso. Los bloqueos de objetos permiten restringir el acceso a un bloque de código, normalmente denominado sección crítica. Mientras que un subproceso posea el bloqueo de un objeto, ningún otro subproceso podrá adquirir ese bloqueo. Monitor puede utilizarse también para garantizar que no se permita a ningún otro subproceso el acceso a una sección del código de la aplicación que el propietario del bloqueo esté ejecutando, a menos que el otro subproceso esté ejecutando el código utilizando un objeto bloqueado distinto.

NotaNota

Monitor se debe utilizar para bloquear objetos (es decir, tipos de referencia), no tipos de valor. Para obtener información, vea las sobrecargas del método Enter y el tema conceptual Monitores.

La clase Monitor tiene las siguientes características:

  • Está asociada a un objeto a petición.

  • Es independiente, lo que significa que se puede llamar a esta clase directamente desde cualquier contexto.

  • No se puede crear una instancia de Monitor.

Para cada objeto sincronizado, se mantiene la siguiente información:

  • Una referencia al subproceso que contenga el bloqueo en la actualidad.

  • Una referencia a una cola de subprocesos listos, que contenga los subprocesos que ya están listos para obtener el bloqueo.

  • Una referencia a una cola en espera, que contenga los subprocesos que se encuentren a la espera de una notificación sobre un cambio de estado del objeto bloqueado.

En la siguiente tabla se describen las acciones que pueden realizar los subprocesos que obtienen acceso a los objetos sincronizados:

Acción

Descripción

Enter , TryEnter

Adquiere un bloqueo para un objeto. Esta acción marca el principio de una sección crítica. Ningún otro subproceso puede entrar en la sección crítica, a menos que esté ejecutando las instrucciones de la sección crítica utilizando un objeto bloqueado distinto.

Wait

Libera el bloqueo sobre un objeto para permitir a otros subprocesos bloquear y obtener acceso al objeto. El subproceso que realiza la llamada espera mientras otro subproceso obtiene acceso al objeto. Las señales de pulsos se utilizan para notificar los cambios de estado de un objeto a los subprocesos en espera.

Pulse (señal), PulseAll

Envía una señal a uno o varios subprocesos en espera. La señal notifica al subproceso en espera que el estado de un objeto bloqueado ha cambiado, y el propietario del bloqueo está en condiciones de liberarlo. El subproceso en espera se coloca en la cola de subprocesos listos del objeto, de modo que pueda recibir el bloqueo del objeto. Una vez que el subproceso dispone del bloqueo, puede comprobar el nuevo estado del objeto y así observar si se ha alcanzado el estado requerido.

Exit

Libera el bloqueo en un objeto. Esta acción también marca el final de una sección crítica protegida por el objeto bloqueado.

Utilice los métodos Enter y Exit para marcar el principio y el final de una sección crítica. Si la sección crítica está formada por un conjunto de instrucciones contiguas, el bloqueo adquirido por el método Enter garantiza que sea un único subproceso el que pueda ejecutar el código delimitado con el objeto bloqueado. En tal caso, se recomienda incluir dichas instrucciones en un bloque try y colocar la instrucción Exit en un bloque finally. Esta utilidad se utiliza normalmente para sincronizar el acceso a un método de instancia o a un método estático de una clase. La funcionalidad proporcionada por los métodos Enter y Exit es idéntica a la que proporciona la instrucción lock de C# (SyncLock en Visual Basic), excepto que lock y SyncLock contienen la sobrecarga del método Enter(Object, Boolean%) y el método Exit en un bloque try...finally (TryFinally en Visual Basic) para asegurar que se libera el monitor.

A partir de .NET Framework 4, hay dos conjuntos de sobrecargas para los métodos TryEnter y Enter. Un conjunto de sobrecargas tiene un parámetro ref (ByRef en Visual Basic) Boolean que se establece atómicamente en true si se adquiere el bloqueo, aunque se produzca una excepción al adquirir el bloqueo. Use estas sobrecargas si es fundamental liberar el bloqueo en todos los casos, incluso cuando los recursos que el bloqueo está protegiendo no están en un estado coherente.

Si una sección crítica abarca todo un método, la utilidad de bloqueo descrita anteriormente puede conseguirse colocando System.Runtime.CompilerServices::MethodImplAttribute en el método y especificando el valor Synchronized en el constructor de MethodImplAttribute. Si se utiliza este atributo, no es necesario utilizar las instrucciones Enter y Exit. Tenga en cuenta que el atributo es el responsable de que el subproceso actual mantenga el bloqueo hasta que el método devuelve un valor; si el bloqueo puede liberarse antes, utilice la clase Monitor o la instrucción lock de C# en lugar del atributo.

Aunque las instrucciones Enter y Exit que bloquean y liberan un objeto determinado puedan atravesar los límites de clase y miembro, no se considera una práctica recomendable.

A la hora de seleccionar un objeto en el que se va a sincronizar, sólo debe bloquear los objetos internos o privados. El bloqueo sobre objetos externos puede dar lugar a interbloqueos, porque el código no relacionado puede bloquear los mismos objetos con otros propósitos.

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.

.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