2010-03-09 22 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使用的相關數據的指針,則可能會出現不安全的代碼。

相關問題