开发者

How to test if a thread is holding a lock on an object in C#?

开发者 https://www.devze.com 2022-12-22 03:35 出处:网络
Is there a way to test if the current thread is holding a monitor lock on an object? I.e. an equivalent to the Threa开发者_Go百科d.holdsLock in Java.

Is there a way to test if the current thread is holding a monitor lock on an object? I.e. an equivalent to the Threa开发者_Go百科d.holdsLock in Java.

Thanks,


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.

EDIT: In .NET 4.5, this is available with Monitor.IsEntered.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消