2010-03-09 12 views

Odpowiedz

13

Nie wierzę, że istnieje. Są groteskowe rzeczy, które można zrobić, nazywając Monitor.Wait(monitor, 0) i łapiąc SynchronizationLockException, ale to dość okropne (i teoretycznie "złapać" puls, na który czekała inna nitka).

Proponuję spróbować przeprojektować tak, abyś tego nie potrzebował, obawiam się.

EDYCJA: W .NET 4.5 jest dostępna pod adresem Monitor.IsEntered.

+0

Dziękuję Jonowi, na szczęście nie próbujemy go użyć, to tylko coś, co wpadło mi do głowy, gdy czytałem artykuły na temat wątków w C# :-P – theburningmonk

+0

cześć Jon, w C# 4.5 jest to teraz możliwe z [Monitor.IsEntered (Object obj)] (http://msdn.microsoft.com/en-us/library/system.threading.monitor.isentered.aspx) prawda? – Ben

+1

@Ben: Zakładając, że masz na myśli .NET 4.5, tak. Dokona edycji. –

1

Odpowiednie informacje są przechowywane przez strukturę SyncBlock używaną przez CLR i można je wyświetlić podczas debugowania za pomocą np. WinDbg + sos. Według mojej wiedzy nie ma sposobu, aby uzyskać informacje z kodu zarządzanego, ale może być to możliwe z niebezpiecznego kodu zakładając, że możesz jakoś (i w niezawodny sposób) uzyskać wskaźnik do odpowiednich danych używanych przez CLR.

Powiązane problemy