启蒙篇
死锁是进程管理的一部分,故此章是对第一章进程管理部分的延伸扩展
基础篇
1.死锁三胞胎
- 死锁:僵持,各持对方所需资源互不相让
- 活锁:僵持,彼此间渴望资源却都不主动争夺资源,导致资源空闲的同时二者被阻塞
- 饥饿:一方让步,等待时间过长。而另一方一直占用资源
2.原因&产生的必要条件
原因
产生原因:多进程对有限不可剥夺资源的竞争
Ⅰ.信号量使用不当
-
eg:所赋初值有问题,导致死锁
-
semephore S1 = 0; semephore S2 = 0; A(){ B(){ while(1){ while(1){ P(S1); P(S2); 操作; 操作; V(S2) V(S1); } } } }
-
Ⅱ.应用程序死锁
- QQ、360等应用程序设计时导致的死锁
必要条件
- 互斥条件:临界资源
- 不可剥夺条件:双方不可强制剥夺对方资源
- 请求保持条件:占有自身资源的同时请求获取对方占有资源
- 循环等待条件:僵持等待,互不相让
3.死锁的处理和预防
- 破坏护持条件:几乎行不通
- 破坏不可剥夺条件:强行剥夺,但是要付出代价
- 破坏请求和保持条件:一次申请完
- 破坏循环等待条件:顺序资源分配法
银行家算法
尽可能增加手头资金的流通速度(周转速度)
银行家算法的思想是试图规划合理的资源申请顺序,以求得安全序列。若可以找到则可以避免死锁,否则必定会发生死锁