死锁的定义

在同一时刻存在一组进程分别独自占有资源并且同时又在试图相互访问对方的资源,导致了相互等待的状态(A等B,B等C,C等A),形成了死锁(闭环状态)。
并发:死锁的条件

细节说明

进程请求的资源如果被其他进程占有,则请求会变为等待状态

  • 被占有的资源一、二、三只能被进程A、B、C独自占有而不能同时有两个及以上进程占有
  • 当进程A在请求资源二时,进程A会一直占有资源一而不会释放,同理,进程B的请求和进程C的请求
  • 进程A、B、C占有的资源一、二、三不能被其他进程抢占
  • 进程A、B、C请求的时间/顺序以及资源一、二、三被占有的情况恰好如图所示时就形成了死锁状态

形成的条件

并发:死锁的条件

必要条件

死锁一定包含了下面三个条件:互斥、占有且等待、不可抢占,但是满足了下面三个条件不一定会形成死锁,即是这三个条件是死锁的必要条件。

  • 互斥
    一次只有一个进程可以使用资源。其他进程不能访问已分配给某个进程的资源

  • 占有且等待
    当一个进程等待其他进程时,继续占有已经分配的资源

  • 不可抢占
    不能强行抢占进程已占有的资源

其他条件

要形成死锁除了上面三个条件:互斥、占有并等待、不可抢占之外,还需要另外一个条件:循环等待,即是刚好在某个时间点发生了 你等我—我等他—他等你 的循环等待,这四个条件同时满足的时候就形成了死锁。

  • 循环等待
    存在一个封闭的进程链,使得每个进程至少占有此链中下一个进程所需要的资源

总结

以上四个条件:互斥、占有且等待、不可抢占以及循环等待一起构成了死锁的条件(充分必要条件)。
另附死锁图一张:
并发:死锁的条件

  • 车辆:可以理解为进程
  • 车道:可以理解为资源
    只有在4辆车同时到达中心位置,并且相互阻止了对方前进的方向的时候就会发生循环阻塞,也就是循环等待,类比为死锁。

相关文章: