Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何测试线程是否在C#中的对象上持有锁?_C#_.net_Multithreading_Locking - Fatal编程技术网

如何测试线程是否在C#中的对象上持有锁?

如何测试线程是否在C#中的对象上持有锁?,c#,.net,multithreading,locking,C#,.net,Multithreading,Locking,有没有办法测试当前线程是否在对象上持有监视器锁?即,与Java中的Thread.holdsLock等效 谢谢,我相信没有。你可以通过调用Monitor.Wait(Monitor,0)和捕获SynchronizationLockException来进行一些糟糕的黑客操作,但这非常可怕(理论上可以“捕获”另一个线程正在等待的脉冲) 我建议你尝试重新设计,这样你就不需要这个了 编辑:在.NET 4.5中,这可从中获得。相关信息由CLR使用的SyncBlock结构存储,并可在调试过程中查看,例如WinD

有没有办法测试当前线程是否在对象上持有监视器锁?即,与Java中的Thread.holdsLock等效


谢谢,

我相信没有。你可以通过调用
Monitor.Wait(Monitor,0)
和捕获
SynchronizationLockException
来进行一些糟糕的黑客操作,但这非常可怕(理论上可以“捕获”另一个线程正在等待的脉冲)

我建议你尝试重新设计,这样你就不需要这个了


编辑:在.NET 4.5中,这可从中获得。

相关信息由CLR使用的SyncBlock结构存储,并可在调试过程中查看,例如WinDbg+sos。据我所知,无法从托管代码中获取信息,但也可以从不安全代码中获取信息,前提是您可以以某种方式(并且以可靠的方式)获取指向CLR使用的相关数据的指针

谢谢Jon,幸运的是我们没有尝试使用它,当我阅读一些关于C#中线程的文章时,它突然出现在我的脑海中:-Phi Jon,在C#4.5中,这现在是可能的,对吗?