2009-06-16 30 views
5

Tengo un bloqueo en mi código.
Tengo dos hilos ejecutándose al mismo tiempo. ¿Cómo puedo saber si un hilo está bloqueando ese objeto?¿Cómo puedo averiguar si un objeto está bloqueado? C#

private readonly object _lockObject = new Object(); 

// Both methods running 
public void Method1() 
{ 
    if(certainCriteria) 
    { 
     lock(_lockObject) 
     { 
     //doWork; 
     } 
    } 
} 

// Both methods running 
public void Method2() 
{ 
    if(isLocked?(_lockObject)) 
    { 
     //doWork; 
    } 
} 

¿Alguien tiene el isLocked? ¿método?

¡Gracias de antemano!

Respuesta

8

Usted podía uso Monitor.TryEnter (ya sea con un tiempo de espera de 0, o la sobrecarga que no tiene un tiempo de espera en absoluto) y luego llamar inmediatamente Monitor.Exit si tiene éxito - pero yo diría que esto es generalmente una mala olor a diseño En particular, los datos están obsoletos inmediatamente después de devolverlos.

¿Qué estás tratando de lograr?

+0

@Jon: Yaow es demasiado rápido, ya está (se lee mejor si se puede controlar el acento de un país negro). Era lo que iba a sugerir con una gran advertencia: "Funciona sobre la base de que" sabemos "cómo funciona el bloqueo". – AnthonyWJones

+0

No me molesta especialmente el hecho de que depende de saber cómo funciona el bloqueo, no es que eso vaya a cambiar. Es solo que se siente completamente mal. ¡Me atrevo a decir que hay * algunas * situaciones en las que es útil, pero probablemente menos que en los lugares donde se usa realmente! –

+0

Hola otra vez Jon! Estoy implementando un BufferManager. Básicamente tiene una pila de amortiguadores. Cuando un hilo pop() s la pila y está vacío, quiero que todos los hilos esperen en su próximo pop() mientras un hilo llena la pila. Una vez completado, todos los otros hilos para seguir apareciendo. Sin embargo, no estoy seguro de los mecanismos de bloqueo C#. – divinci

Cuestiones relacionadas