发生死锁的条件

Posted

技术标签:

【中文标题】发生死锁的条件【英文标题】:Condition for deadlock to happen 【发布时间】:2015-12-17 20:15:00 【问题描述】:

死锁-

死锁是指两个或多个相互竞争的动作都在等待对方完成的情况,因此永远都不会。

要发生死锁,所有这四个条件必须同时满足

    互斥 稍等 无抢占 循环等待

我们应用死锁检测算法来检查系统是否处于死锁状态。但是如果上述任何一个标准失败(例如没有抢占失败,所以一些资源正在被释放),这会导致系统无死锁。所以我的想法是,如果死锁检测算法发现状态不安全并且以上四个标准同时成立,那么我们可以说系统处于死锁状态。 不安全状态可能会也可能不会导致死锁。 但是同时满足所有这 4 个条件的不安全状态必然会导致死锁。

我想对了吗?

我还有一个问题。我们怎么能说死锁肯定发生了,因为下一刻某个进程可能会释放他们的资源来摆脱死锁。

【问题讨论】:

【参考方案1】:

我想对了吗?

是的,你是对的。 请参阅此link,了解为什么不安全可能不会导致死锁。

我还有一个问题。我们怎么能说死锁肯定发生了,因为下一刻某个进程可能会释放他们的资源来摆脱死锁。

说发生了死锁。所有导致死锁的进程都在等待获取一些资源。并且由于“无抢占”,这样的进程不会被抢占并因此释放资源。同样由于“持有并等待”属性,进程需要更多资源才能继续,但不会放弃或释放它现在持有的任何东西,而是会等到所需资源得到满足。一旦出现死锁,在您打破上述条件之一之前,什么都不会发生(不可能有任何进展)。打破一个条件将使其他一些过程满足其要求并确保进度和完成。

【讨论】:

plz,如果答案切中要害,你也可以投票吗? 据我了解,“死锁是一组进程相互等待释放资源的永久阻塞”。如果没有抢占,进程一旦完成就会自动释放资源。所以这应该导致饥饿,而不是僵局,对吧? 但是没有进程会朝着完成的方向前进,因为它依赖于某些资源,并且他们将无休止地等待它,因为其他人还没有准备好释放。因此陷入僵局。

以上是关于发生死锁的条件的主要内容,如果未能解决你的问题,请参考以下文章

操作系统-死锁死锁发生的条件是什么?死锁的避免和预防方法

如何减少SQLServer死锁发生

什么是死锁,简述死锁发生的四个必要条件,如何避免与预防死锁

java并发编程04:死锁

(王道408考研操作系统)第二章进程管理-第四节2:死锁处理策略之预防死锁

死锁的四个必备条件