发生死锁的条件
Posted
技术标签:
【中文标题】发生死锁的条件【英文标题】:Condition for deadlock to happen 【发布时间】:2015-12-17 20:15:00 【问题描述】:死锁-
死锁是指两个或多个相互竞争的动作都在等待对方完成的情况,因此永远都不会。
要发生死锁,所有这四个条件必须同时满足
-
互斥
稍等
无抢占
循环等待
我们应用死锁检测算法来检查系统是否处于死锁状态。但是如果上述任何一个标准失败(例如没有抢占失败,所以一些资源正在被释放),这会导致系统无死锁。所以我的想法是,如果死锁检测算法发现状态不安全并且以上四个标准同时成立,那么我们可以说系统处于死锁状态。 不安全状态可能会也可能不会导致死锁。 但是同时满足所有这 4 个条件的不安全状态必然会导致死锁。
我想对了吗?
我还有一个问题。我们怎么能说死锁肯定发生了,因为下一刻某个进程可能会释放他们的资源来摆脱死锁。
【问题讨论】:
【参考方案1】:我想对了吗?
是的,你是对的。 请参阅此link,了解为什么不安全可能不会导致死锁。
我还有一个问题。我们怎么能说死锁肯定发生了,因为下一刻某个进程可能会释放他们的资源来摆脱死锁。
说发生了死锁。所有导致死锁的进程都在等待获取一些资源。并且由于“无抢占”,这样的进程不会被抢占并因此释放资源。同样由于“持有并等待”属性,进程需要更多资源才能继续,但不会放弃或释放它现在持有的任何东西,而是会等到所需资源得到满足。一旦出现死锁,在您打破上述条件之一之前,什么都不会发生(不可能有任何进展)。打破一个条件将使其他一些过程满足其要求并确保进度和完成。
【讨论】:
plz,如果答案切中要害,你也可以投票吗? 据我了解,“死锁是一组进程相互等待释放资源的永久阻塞”。如果没有抢占,进程一旦完成就会自动释放资源。所以这应该导致饥饿,而不是僵局,对吧? 但是没有进程会朝着完成的方向前进,因为它依赖于某些资源,并且他们将无休止地等待它,因为其他人还没有准备好释放。因此陷入僵局。以上是关于发生死锁的条件的主要内容,如果未能解决你的问题,请参考以下文章