¿Hay alguna manera de comprobar si el hilo actual está sujetando un bloqueo de monitor en un objeto? Es decir. un equivalente al Thread.holdsLock en Java.Cómo comprobar si un hilo mantiene un bloqueo en un objeto en C#?
Gracias,
¿Hay alguna manera de comprobar si el hilo actual está sujetando un bloqueo de monitor en un objeto? Es decir. un equivalente al Thread.holdsLock en Java.Cómo comprobar si un hilo mantiene un bloqueo en un objeto en C#?
Gracias,
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
.
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.
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
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
@Ben: suponiendo que te refieres a .NET 4.5, sí. Editaré –