2009-05-23 46 views
11

¿Cuál es la diferencia entre un monitor y un lock?Diferencia entre monitor y bloqueo?

Si un bloqueo es simplemente una implementación de exclusión mutua, entonces ¿es un monitor simplemente una forma de hacer uso del tiempo de espera entre las ejecuciones de métodos?

Una buena explicación sería de gran ayuda gracias ....

respecto

Respuesta

13

Por ejemplo en C# .NET una declaración de bloqueo es equivalente a:

Monitor.Enter(object); 
try 
{ 
    // Your code here... 
} 
finally 
{ 
    Monitor.Exit(object); 
} 

Sin embargo, tenga en cuenta que Monitor puede también Wait() y Pulse(), que a menudo son útiles en situaciones complejas multithreading.

Editar: En versiones posteriores del marco .NET, esto fue cambiado a:

bool lockTaken = false; 
try 
{ 
    Monitor.Enter(object, ref lockTaken); 
    // Your code here... 
} 
finally 
{ 
    if (lockTaken) 
    { 
     Monitor.Exit(object); 
    } 
} 
+0

@John Gietzen: awesome ...Gracias por la gran explicación. – IAbstract

4

Están relacionados. Por ejemplo, en C#, la instrucción lock es un simple proceso de try-finally alrededor de entering a Monitor y exiting one cuando haya terminado.

1

monitores son el compilador asistida bloquea "semiautomáticas". Permiten a uno declarar synchronized métodos en clases, etc. Este es solo un enfoque diferente para proporcionar exclusión mutua. Encontré que this book es la explicación más completa de los conceptos, aunque está principalmente orientada a desarrolladores de sistemas operativos.

0

Un bloqueo garantiza la exclusión mutua.

Un monitor asocia los datos que se protegerán y las primitivas de exclusión mutua y sincronización necesarias para proteger los accesos a los datos.
La sincronización se utiliza, p. cuando necesita que un hilo espere hasta que ocurra un evento (por ejemplo, espere hasta que otro hilo coloque un elemento en una cola).

0

Monitores es una construcción de lenguaje de programación que hace lo mismo que semiphores/locks, pero los monitores controlan los datos compartidos mediante la sincronización en tiempo de ejecución. Por el contrario, los bloqueos protegen los datos compartidos simplemente "girando" lo que puede llevar a una utilización de la CPU deficiente.

-1

Bloquear el foco solo en la excreción mutua, pero Moniter proporciona la exclusión mutua automáticamente.

Así que no tenemos que preocuparnos de usar exclusión mutua en Monitor. En lugar de ME, necesitamos conservar sincronizar solo cuando hacemos la programación.

Moniter proporciona una forma más sistemática de programación. Por lo tanto, es más avanzado.

0

No hay diferencia, el bloqueo genera Monitor.Enter y Monitor.Exit dentro de un bloque try/finally. Usar Monitor over lock le permite afinar porque tiene Pulse y PulseAll. También puede tener un procesamiento alternativo si no puede obtener el bloqueo con TryEnter.

-1

El monitor es el concepto y Lock es la implementación real.

Cuestiones relacionadas