死锁是一种涉及多个资源和进程相互交互的情况。
我们可以将死锁的发生想象为楼梯上有两个人的情况。一个是上楼梯,另一个是下楼梯。楼梯很窄,一次只能坐一个人。结果,一个人不得不撤退,而其他人则继续前进并使用楼梯。一旦那个人完成,另一个人就可以使用那个楼梯。但在这里,没有一个人愿意退却,就等着对方退却。他们都不能使用楼梯。这里的人是过程,楼梯是资源。
当一个进程请求另一个进程占用的资源时,该进程需要另一个资源才能继续,但被第一个进程占用,则称为死锁。
发生死锁需要4个条件。借助上述楼梯示例可以理解它们:
- 互斥:
当两个人在平台相遇时,他们不能只是走过去,因为只有一个人的空间。这种只允许一个人(或进程)使用他们(或资源)之间的步骤的条件是发生死锁所必需的第一个条件。 - 保持并等待:
当二人不退而守其阵地时,称为守。这是死锁的下一个必要条件。 - 无抢占:
为了解决死锁,一个人可以简单地取消一个进程让其他进程继续。但操作系统不这样做。它将资源分配给处理器所需的时间,直到任务完成。因此,不会临时重新分配资源。这是死锁的第三个条件。 - 循环等待:
当两人拒绝后退,等待对方后退,以便完成各自的任务时,称为循环等待。这是发生死锁的最后条件。
笔记:
所有 4 个条件都是发生死锁的必要条件。如果任何一个被阻止或解决,死锁就解决了。