- 每个进程都占有一个资源,同时又在等待另一个进程手中的资源,从而发生死锁
- 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是死锁 。发生死锁之后,如果没有外力干涉,这些进程都将无法向前推进
- 死锁:至少有两个或两个以上的进程同时发生死锁
- 饥饿:可能只有一个进程发生饥饿
- 死循环:死锁和饥饿是管理者(操作系统)的问题,死循环是管理者的问题
- 死锁的必要条件:
- 互斥条件
- 不剥夺条件
- 请求和保持条件
- 循环等待条件
其实这里有点不准确,确切来说,第四个条件实际上是前三个条件的潜在结果,即假设前三个条件存在,则可能发生一系列事件会导致不可解的循环等待。这个不可解的循环等待实际上就是死锁的定义
另外,条件4中列出的循环等待之所以不可解,是因为有前面三个条件的存在。因此这四个条件一起构成了死锁的充分必要条件
这里问题不同的书籍有不同的观点,这里笔者觉得《操作系统 精髓与设计原理》中的解释比较有道理:
- 第一个到第三个条件是策略条件
- 第四个条件则取决于所涉及的进程请求和释放资源的 顺序
- 注意:发生死锁时一定有循环等待,但是发生循环等待的时候未必发生死锁