死锁简介

每个进程都需要一些资源来完成它的执行。 但是,该资源是按顺序授予的。

  • 该进程请求一些资源。
  • 如果可用,操作系统会授予资源,否则请等待进程。
  • 该过程使用它并在完成时释放。

死锁是每个计算机进程等待分配给另一个进程的资源的情况。在这种情况下,由于它所需的资源不被执行,因此其他进程也在等待其他资源被释放。

假设有三个进程P1,P2和P3。有三种不同的资源R1,R2和R3。 R1分配给P1,R2分配给P2,R3分配给P3。

过了一段时间后,P1要求P2正在使用R1。 P1停止执行,因为它不能在没有R2的情况下完成。 P2也需要P3正在使用的R3。 P2也停止执行,因为没有R3就不能继续执行。 P3也要求R1使用P1,因此P3也停止执行。

在这种情况下,三个流程之间正在形成一个循环。没有一个进程正在进行,它们都在等待。由于所有进程都被阻止,计算机变得无响应。

饥饿和死锁的区别

编号 死锁 饥饿
1 死锁是一种没有进程被阻塞而没有进程继续的情况 饥饿是低优先级进程被阻止并且高优先级进程继续进行的情况。
2 死锁是一个无限的等待。 饥饿是漫长的等待,但不是无限的。
3 每个死锁始终是一个饥饿。 每一个饥饿不一定是死锁。
4 请求的资源被其他进程阻塞。 请求的资源不断被更高优先级的进程使用。
5 当相互排斥,保持和等待,同时不发生抢占和循环等待时,发生死锁。 它由于不受控制的优先权和资源管理而发生。

死锁的必要条件

相互排斥

资源只能以互斥方式共享。 这意味着,如果两个进程不能同时使用相同的资源。

保持并等待

进程等待一些资源,同时持有另一个资源。

没有抢先
原定的过程将一直执行到完成。 调度程序不能同时调度其他进程。

循环等待
所有进程都必须以循环方式等待资源,以便最后一个进程正在等待第一个进程持有的资源。


上一篇:二进制信号量或互斥量

下一篇:处理死锁的策略

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程