Skip to content

Latest commit

 

History

History
56 lines (34 loc) · 2.63 KB

2.4_1_死锁的概念.md

File metadata and controls

56 lines (34 loc) · 2.63 KB

2.4_1_死锁的概念

1.知识总览

image-20210610152949581

2.什么是死锁

image-20210610153016543

image-20210610153032134

  • 每个进程都占有一个资源,同时又在等待另一个进程手中的资源,从而发生死锁
  • 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是死锁 。发生死锁之后,如果没有外力干涉,这些进程都将无法向前推进

3.死锁、饥饿、死循环的区别

image-20210610153448148

  • 死锁:至少有两个或两个以上的进程同时发生死锁
  • 饥饿:可能只有一个进程发生饥饿
  • 死循环:死锁和饥饿是管理者(操作系统)的问题,死循环是管理者的问题

4.死锁产生的必要条件

image-20210610153636627

  • 死锁的必要条件:
    • 互斥条件
    • 不剥夺条件
    • 请求和保持条件
    • 循环等待条件

其实这里有点不准确,确切来说,第四个条件实际上是前三个条件的潜在结果,即假设前三个条件存在,则可能发生一系列事件会导致不可解的循环等待。这个不可解的循环等待实际上就是死锁的定义

另外,条件4中列出的循环等待之所以不可解,是因为有前面三个条件的存在。因此这四个条件一起构成了死锁的充分必要条件

这里问题不同的书籍有不同的观点,这里笔者觉得《操作系统 精髓与设计原理》中的解释比较有道理:

  • 第一个到第三个条件是策略条件
  • 第四个条件则取决于所涉及的进程请求和释放资源的 顺序
  • 注意:发生死锁时一定有循环等待,但是发生循环等待的时候未必发生死锁

5.什么时候发生死锁

image-20210610154729914

6.死锁的处理策略

image-20210610154752169

7.总结

image-20210610154852703