死锁
在并发环境下各个进程因争夺资源而造成的一种互相等待对方手里的资源导致各进程都阻塞,无法向前推进的现象,就是死锁。
1、产生死锁的必要条件
(1)互斥条件:只有对必须互斥使用的资源的争夺才会导致死锁;
(2)不剥夺条件:进程所获得的资源在未使用完之前不能被其它进程强行夺走,只能自己释放;
(3)请求和保持条件:进程已经保持了至少一个资源,但又请求了其它资源,而该资源又被其它进程所占用,此时请求进程阻塞,自己占用的资源又不史昂;
(4)循环等待条件:存在一种进程资源的循环等待链。
2、什么时候发生死锁
(1)对系统资源的争夺
(2)进程推进顺序非法
(3)信号量使用不当也会造成死锁
3、死锁处理策略
(1)预防死锁:破坏死锁的4个必要条件
(2)避免死锁:避免系统进入不安全的状态
(3)死锁的检测和接触:允许发生死锁,系统进行检测并解锁
4、避免死锁
银行家算法:核心思想是在资源分派之前预先判断这次分配受会导致系统进入到不安全状态,以此决定是否答应资源的分配请求。
银行家算法步骤:
a.检查此次申请是否超过了之前声明的最大需求数
b.检查此时系统剩余的可用资源是否还能满足进程的这次请求
c.试探分配,更改数据结构
d.用安全性算法,检查此次分配是否会导致系统进入不安全状态
(安全性算法步骤:检验当前系统的剩余可用资源是否能够满足某个进程的最大需求,如果可以,就该把该进程加入安全序列,并把进程所持有的资源全部回收,不断重复上述步骤,看能否所有进程都能加入安全序列)