gpt4 book ai didi

deadlock - 死锁的常见原因有哪些?

转载 作者:行者123 更新时间:2023-12-01 22:25:33 25 4
gpt4 key购买 nike

死锁很难发现,而且消除起来也很不舒服。

如何找到代码中死锁的错误源?是否存在“死锁模式”?

在我的特殊情况下,它涉及数据库,但这个问题对于每个死锁都是开放的。

最佳答案

更新:最近的 MSDN 文章 Tools And Techniques to Identify Concurrency Issues ,也可能感兴趣

<小时/>

MSDN 文章中的 Stephen Toub Deadlock monitor陈述了以下四个发生死锁的必要条件:

  • 特定资源的数量有限。对于 C# 中的监视器(当您使用 lock 关键字时使用的监视器),这个有限数量是 1,因为监视器是互斥锁(意味着一次只有一个线程可以拥有监视器)。

  • 拥有一种资源并请求另一种资源的能力。在 C# 中,这类似于锁定一个对象,然后在释放第一个锁之前锁定另一个对象,例如:


lock(a)
{
...
lock(b)
{
...
}
}
  • 没有抢占能力。在 C# 中,这意味着一个线程不能强制另一个线程释放锁。

  • 循环等待条件。这意味着存在一个线程循环,每个线程都在等待下一个线程释放资源才能继续。

他接着解释说,避免死锁的方法是避免(或阻止)条件四。

Joe Duffy discusses several techniques for avoiding and detecting deadlocks, including one known as lock leveling. In lock leveling, locks are assigned numerical values, and threads must only acquire locks that have higher numbers than locks they have already acquired. This prevents the possibility of a cycle. It's also frequently difficult to do well in a typical software application today, and a failure to follow lock leveling on every lock acquisition invites deadlock.

关于deadlock - 死锁的常见原因有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/528303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com