【问题标题】:How costly is deadlock detection?死锁检测的成本是多少?
【发布时间】:2013-11-17 19:54:15
【问题描述】:

我想知道Lock 检测周期有多复杂,它有多少开销。实际上,我认为它应该相当简单,但是 Java 中缺少它让我不确定。

an answer 推荐使用 tryLock,但恕我直言,这种检测是语言应该提供的开箱即用的东西(作为一个选项)。

我发现的唯一类似的东西是 Guava 的 CycleDetectingLockFactory,但它有一些不平凡的开销和 doesn't try 来捕获所有死锁。

【问题讨论】:

  • 银行家算法呢?
  • @Trying:不......它做了两个完全不充分的假设:1.每个线程都事先知道它可能需要什么。 2. 每个资源有多个实例。银行家的算法可能适用于某些问题,但如果不满足假设,它就什么也做不了。
  • 问题不在于它要花多少钱,而在于其他程序员愿意牺牲多少来让你不小心使用锁定。有些甚至不会给你一个 CPU 时钟周期。所以最好的建议是:清理你的代码而不是要求自动解决方案。尤其是检测仍然不能解决问题。它只会告诉你。顺便说一句:JVM死锁检测,但不是自动的;它是由线程堆栈转储触发的。
  • 如果可能使用有序锁(不确定技术术语是什么),所以死锁是不可能的。
  • @Holger:其他程序员根本不需要支付任何费用,因为检测可以是可选的。除了StandardLockFactory 之外,还有一个DeadlockDetectingLockFactory,它是完全免费的。但我可能同意 JVM 检测已经足够好了。

标签: java concurrency deadlock guava


【解决方案1】:

我相信这可能是 O(N**3),因为您可以在对象上持有 X 锁,这些对象每个都被 Y 其他线程等待,这些线程每个都可以持有 Z 锁。然后你必须对它们进行拓扑排序以检测循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多