如何找出哪个线程锁定了互斥锁?

时间:2010-11-04 17:29:35

标签: .net multithreading deadlock mutex

我使用.Net Mutex类来跨线程锁定我的应用程序的部分内容。我遇到了一些死锁问题,如果我能找到当前锁定的线程的名称,那将非常有用。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:5)

你不能,Mutex是本机Windows句柄的包装器。 Windows模糊处理值以防止任何人窥视内部内核结构。

为您的代码添加检测。每次获取互斥锁时,都足够容易存储线程的ManagedId或Name的值。记录通常对解决线程问题很有用,虽然它很危险,因为它会影响线程的时间。 VS2010旗舰版有一个名为Concurrency Visualizer的光滑插件。

答案 1 :(得分:1)

您可以根据Mutux创建自己的锁类。显然,您希望尽可能保持二进制兼容,以便您可以轻松地将代码中的现有引用与新类交换。 WaitOneReleaseMutex方法基本上只调用真实Mutex,但添加日志记录或其他可能对调试有帮助的方法。