2010-03-09 12 views

Respuesta

13

No lo creo. Hay cosas horribles que puedes hacer, como llamar al Monitor.Wait(monitor, 0) y atrapar el SynchronizationLockException, pero eso es bastante horrible (y teóricamente podría "atrapar" un pulso que otro hilo estaba esperando).

Te sugiero que trates de rediseñar para que no lo necesites, me temo.

EDITAR: En .NET 4.5, esto está disponible con Monitor.IsEntered.

+0

Gracias Jon, afortunadamente no estamos tratando de usarlo, es solo algo que se me vino a la cabeza cuando estaba leyendo algunos artículos sobre enhebrado en C# :-P – theburningmonk

+0

hola Jon, en C# 4.5 esto ahora es posible con [Monitor.IsEntered (Object obj)] (http://msdn.microsoft.com/en-us/library/system.threading.monitor.isentered.aspx) ¿verdad? – Ben

+1

@Ben: suponiendo que te refieres a .NET 4.5, sí. Editaré –

1

La información relevante es almacenada por la estructura SyncBlock utilizada por el CLR y se puede ver durante la depuración con p. Ej. WinDbg + sos. Que yo sepa, no hay forma de obtener la información del código administrado, pero puede ser posible a partir de un código inseguro asumiendo que de alguna manera (y de manera confiable) puede obtener un puntero a los datos relevantes utilizados por el CLR.

Cuestiones relacionadas