如何测试线程是否在C#中的对象上持有锁?
有没有办法测试当前线程是否在对象上持有监视器锁?即,与Java中的Thread.holdsLock等效如何测试线程是否在C#中的对象上持有锁?,c#,.net,multithreading,locking,C#,.net,Multithreading,Locking,有没有办法测试当前线程是否在对象上持有监视器锁?即,与Java中的Thread.holdsLock等效 谢谢,我相信没有。你可以通过调用Monitor.Wait(Monitor,0)和捕获SynchronizationLockException来进行一些糟糕的黑客操作,但这非常可怕(理论上可以“捕获”另一个线程正在等待的脉冲) 我建议你尝试重新设计,这样你就不需要这个了 编辑:在.NET 4.5中,这可从中获得。相关信息由CLR使用的SyncBlock结构存储,并可在调试过程中查看,例如WinD
谢谢,我相信没有。你可以通过调用
Monitor.Wait(Monitor,0)
和捕获SynchronizationLockException
来进行一些糟糕的黑客操作,但这非常可怕(理论上可以“捕获”另一个线程正在等待的脉冲)
我建议你尝试重新设计,这样你就不需要这个了
编辑:在.NET 4.5中,这可从中获得。相关信息由CLR使用的SyncBlock结构存储,并可在调试过程中查看,例如WinDbg+sos。据我所知,无法从托管代码中获取信息,但也可以从不安全代码中获取信息,前提是您可以以某种方式(并且以可靠的方式)获取指向CLR使用的相关数据的指针 谢谢Jon,幸运的是我们没有尝试使用它,当我阅读一些关于C#中线程的文章时,它突然出现在我的脑海中:-Phi Jon,在C#4.5中,这现在是可能的,对吗?