有没有办法测试当前线程是否在对象上持有监视器锁定?即与Java中的Thread.holdsLock等效。
谢谢,
答案 0 :(得分:14)
我不相信有。你可以做的就是调用Monitor.Wait(monitor, 0)
并捕捉SynchronizationLockException
这些很糟糕的黑客攻击,但这非常可怕(理论上可以“捕获”另一个线程正在等待的脉冲)。
我建议你尝试重新设计,这样你就不需要这个了,我很害怕。
编辑:在.NET 4.5中,Monitor.IsEntered
可以使用此功能。
答案 1 :(得分:1)
相关信息由CLR使用的SyncBlock结构存储,并且可以在调试期间查看,例如: WinDbg + sos。据我所知,无法从托管代码中获取信息,但是可以从不安全的代码中获取,假设您可以以某种方式(以可靠的方式)获取指向CLR使用的相关数据的指针。