Как я могу узнать, какая нить имеет блокировку на Mutex? - PullRequest
3 голосов
/ 04 ноября 2010

Я использую класс .Net Mutex для блокировки частей моего приложения между потоками.У меня возникли некоторые проблемы с блокировкой, и было бы очень полезно, если бы я мог узнать имя потока, который в данный момент имеет блокировку.

Есть ли простой способ сделать это?

Ответы [ 2 ]

5 голосов
/ 04 ноября 2010

Вы не можете, Mutex - это оболочка для родного дескриптора Windows.Windows запутывает значения дескрипторов, чтобы никто не заглядывал во внутренние структуры ядра.

Добавьте инструментарий в свой код.Достаточно просто сохранить значение ManagedId или Name потока каждый раз, когда вы получаете мьютекс.Ведение журнала часто полезно для устранения проблем с многопоточностью, хотя это опасно, поскольку сильно влияет на синхронизацию потоков.В выпуске VS2010 Ultimate есть отличное дополнение Concurrency Visualizer .

1 голос
/ 04 ноября 2010

Вы можете создать свой собственный класс блокировки на основе Mutux.Очевидно, вы хотели бы сохранить его как можно более совместимым с двоичными данными, чтобы вы могли легко поменять существующие ссылки в коде с новым классом.Методы WaitOne и ReleaseMutex, по сути, просто обращаются к реальному Mutex, но добавляют протоколирование или что-то еще, что может быть полезно для отладки.

...