views:

69

answers:

2

Hi,

Is there a way to test if the current thread is holding a monitor lock on an object? I.e. an equivalent to the Thread.holdsLock in Java.

Thanks,

+5  A: 

I don't believe there is. There are grotty hack things you could do like calling Monitor.Wait(monitor, 0) and catching the SynchronizationLockException, but that's pretty horrible (and could theoretically "catch" a pulse that another thread was waiting for).

I suggest you try to redesign so that you don't need this, I'm afraid.

Jon Skeet
Thanks Jon, luckily we're not trying to use it, it's just something that popped into my head when I was reading through some articles on threading in C# :-P
theburningmonk
+1  A: 

The relevant information is stored by the SyncBlock structure used by the CLR and can be viewed during debugging with e.g. WinDbg + sos. To my knowledge there is no way to obtain the information from managed code, but it may be possible from unsafe code assuming you can somehow (and in a reliable manner) obtain a pointer to the relevant data used by the CLR.

Brian Rasmussen