2010-03-09 36 views

回答

13

我不相信有。你可以做的事情有很多,比如拨打Monitor.Wait(monitor, 0)和赶上SynchronizationLockException,但这很糟糕(理论上可以“捕捉”另一个线程正在等待的脉冲)。

我建议你尝试重新设计,以免你不需要这个,恐怕。

编辑:在.NET 4.5中,这是Monitor.IsEntered可用。

+0

感谢Jon,幸运的是我们并没有试图使用它,这只是当我阅读一些关于C#中的线程的文章时弹出到我脑海中的东西:-P – theburningmonk 2010-03-09 10:07:48

+0

嗨Jon,在C#4.5中这是现在可能的与[Monitor.IsEntered(Object obj)](http://msdn.microsoft.com/en-us/library/system.threading.monitor.isentered.aspx)对不对? – Ben 2012-10-06 17:51:07

+1

@Ben:假设你的意思是.NET 4.5,是的。将编辑。 – 2012-10-06 20:57:17

1

相关信息由CLR使用的SyncBlock结构存储,并且可以在调试过程中用例如WinDbg + sos。据我所知,没有办法从托管代码中获取信息,但是假设您可以以某种方式(以可靠的方式)获得指向CLR使用的相关数据的指针,则可能会出现不安全的代码。

相关问题