【问题标题】:How can I find out which thread has the lock on a Mutex?如何找出哪个线程锁定了 Mutex?
【发布时间】:2011-05-05 04:57:20
【问题描述】:

我使用 .Net Mutex 类跨线程锁定我的应用程序的某些部分。我遇到了一些死锁问题,如果我能找出当前拥有锁的线程的名称将会非常有帮助。

有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: .net multithreading deadlock mutex


    【解决方案1】:

    你不能,Mutex 是原生 Windows 句柄的包装器。 Windows 会混淆句柄值以防止任何人窥探内部内核结构。

    为您的代码添加检测。每次获取互斥锁时,很容易存储线程的 ManagedId 或 Name 的值。日志记录通常对解决线程问题很有用,尽管它很危险,因为它会极大地影响线程的计时。 VS2010 Ultimate 版有一个名为Concurrency Visualizer 的漂亮插件。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 2021-11-08
        相关资源
        最近更新 更多