在计算机系统中很多独占性的资源,在任一时刻它们都只能被一个进程使用。真因为如此,操作系统都授予一个进程(临时)排他地访问某一种资源的能力。
在很多应用中,需要进程排他性地访问若干资源而不是一种,当两个进程为了保护两个不同的共享资源⽽使⽤了两个互斥锁,那么这两个互斥锁应⽤不当的时候,可能会造成两个进程程都在等待对⽅释放锁,在没有外⼒的作⽤下,这些进程会⼀直相互等待,就没办法继续运⾏,这种情况就是发⽣了死锁。
1. 资源
- 可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用,例如存储器。
- 不抢占资源:是指在不引起相关的计算失败的情况下,无法把进程从占有它的进程处抢占过来。
2. 死锁简介
死锁的规范定义是:如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。
在大多数情况下,每个进程所等待的事件是释放进程集合中其他进程所占有的资源。这种死锁成为资源死锁(resource deadlock)
2.1 资源死锁的条件
互斥条件
:每个资源要分已经分配给一个进程,要么就是可用的。多个进程不能同时使用同一个资源。占有和等待条件
:已经得到了某个资源的进程可以再请求新的资源。不可抢占条件
:已经分配给一个进程的资源不能强制性地被抢占,只能被占有他的进程显式的释放。 <