小编典典

什么是死锁?

all

在编写多线程应用程序时,遇到的最常见问题之一是死锁。

我对社区的问题是:

  1. 什么是死锁?

  2. 你如何检测它们?

  3. 你会处理它们吗?

  4. 最后,您如何防止它们发生?


阅读 71

收藏
2022-07-29

共1个答案

小编典典

当多个进程试图同时访问同一个资源时,就会发生 锁定。

一个进程失败,必须等待另一个进程完成。

当等待进程在完成之前仍然持有第一个需要的另一个资源时,就会发生 死锁。

所以,举个例子:

资源 A 和资源 B 被进程 X 和进程 Y 使用

  • X 开始使用 A。
  • X 和 Y 尝试开始使用 B
  • Y“获胜”并首先获得 B
  • 现在 Y 需要使用 A
  • A被X锁定,X正在等待Y

避免死锁的最好方法是避免进程以这种方式交叉。尽可能减少锁定任何东西的需要。

在数据库中,避免在单个事务中对不同的表进行大量更改,避免触发器并尽可能切换到乐观/脏/无锁读取。

2022-07-29