我使用.Net Mutex类来跨线程锁定我的应用程序的部分内容。我遇到了一些死锁问题,如果我能找到当前锁定的线程的名称,那将非常有用。
有一种简单的方法吗?
答案 0 :(得分:5)
你不能,Mutex是本机Windows句柄的包装器。 Windows模糊处理值以防止任何人窥视内部内核结构。
为您的代码添加检测。每次获取互斥锁时,都足够容易存储线程的ManagedId或Name的值。记录通常对解决线程问题很有用,虽然它很危险,因为它会影响线程的时间。 VS2010旗舰版有一个名为Concurrency Visualizer的光滑插件。
答案 1 :(得分:1)
您可以根据Mutux
创建自己的锁类。显然,您希望尽可能保持二进制兼容,以便您可以轻松地将代码中的现有引用与新类交换。 WaitOne
和ReleaseMutex
方法基本上只调用真实Mutex
,但添加日志记录或其他可能对调试有帮助的方法。