死锁
- 死锁的知识点
- 死锁的定义
- 资源的分类
- 资源分配图
- 产生死锁的原因
- 死锁的必要条件
- 死锁的预防或解除
- 死锁的定义
定义
死锁可以定义为相互通信的线程或者一组竞争系统资源的线程相互之间"永久阻塞”的情况,即就是有两个即两个以上的线程在执行过程中,由于竞争资源而造成的阻塞问题,在没有 外力的作用下,它们将无法进行下去,此时系统处于四座状态,这种情况称之为死锁。
资源的分类(可重用资源、可消费资源)
- 可重用资源
定义:指一次只能供一个进程安全的使用,并且不会因为使用而耗尽的资源称为可重用资源.进程得到资源单元,后来又释放这些资源,供其他进程再次使用。
例子:处理器、I/O通道、主存和辅存、设备以及诸如文件、数据库和信号量之类的数据结构。 - 可消费资源
定义:指可以创建(生产)并且可以销毁(消耗)的资源.通常对某种类型可消费资源的数目是没有限制.一个无阻塞的生产进程可以释放任意数目的这类资源.当进程得到一个资源时,该资源就不存在了. - 例子:中断、信号、消息、I/O缓冲区的资源.
资源分配图
产生死锁的原因
1.因竞争资源产生死锁
2.进程顺序推进不当发生死锁
产生思索的必要条件
1.互斥条件
== 资源 - - ->一次只有一个进程可以使用一个资源,其他进程不能访问已经分配给了其他进程的资源. ==
2.请求与保持条件
== 线程 - - -> 一个线程因为请求资源而被阻塞时,对已经获得的资源保持不放.==
3.不可剥夺条件
== 线程已经获得的资源,在未使用之前,不可进行强制剥夺资源的行为.==
4.循环等待条件
== 若干线程之间形成一种头尾相连的循环等待资源关系.即就是存在一个封闭的进程链,使得每个资源至少占有此链中下一个进程所需要的一个资源.==
死锁的预防或解除
- 解决死锁的途径:预防、避免、监测和恢复
1、预防死锁----》(破坏四个必要条件)
a、资源一次性分配(破坏请求与保持条件)
b、可剥夺资源:在线程为满足条件时,释放掉已占有的资源(破坏不可剥夺条件)
c、资源有序分配:系统给每类资源赋予一个编号,每个线程按编号递增的请求资源,释放子资源(破坏请求与保持条件)
2、避免死锁(银行家算法)
允许线程动态地申请资源,系统在资源的分配之前先计算资源分配的安全性,若此次分配不会导致系统进入不安全状态,则给当前线程分配资源,否则就会等待。3、检测与接触死锁
当线程发现进入死锁了,立即从死锁状态解除掉,采用方式剥夺资源:从其他线程剥夺足够多的资源给死锁线程,以免除死锁