代码之家  ›  专栏  ›  技术社区  ›  theburningmonk

如何测试线程是否在c_中持有对象的锁?

  •  12
  • theburningmonk  · 技术社区  · 15 年前

    是否有方法测试当前线程是否持有对象上的监视器锁?也就是说,与Java中的thord.HoalDSLoK等价。

    谢谢,

    2 回复  |  直到 13 年前
        1
  •  14
  •   Jon Skeet    13 年前

    我不相信有。你可以打电话给我 Monitor.Wait(monitor, 0) 抓住 SynchronizationLockException ,但这相当可怕(理论上可以“捕捉”另一条线程正在等待的脉冲)。

    我建议你重新设计,这样你就不需要这个了。

    编辑:在.NET 4.5中,此选项可用于 Monitor.IsEntered .

        2
  •  1
  •   Brian Rasmussen    15 年前

    相关信息由CLR使用的syncblock结构存储,并可在使用windbg+sos进行调试期间查看。据我所知,无法从托管代码中获取信息,但如果您能够以某种方式(以可靠的方式)获取指向CLR使用的相关数据的指针,则可能从不安全代码中获取信息。