产生死锁的必要条件:
1.互斥
从资源层面来看: 两个进程不能同时占有 互斥
2.不剥夺/不可抢占
从俩进程之间来看: 总是等待另一个进程执行完 不抢夺正在占用资源的线程
3.请求与保持
自己占有着资源还不放手 一直等着别人的资源
4.循环等待
总结 好记:东西少 不抢 还客气 还不着急
。
如何处理死锁?
1.打破互斥
允许进程 同时访问某些资源
2.打破不剥夺
如果资源已经被进程占据了,允许进程强行从占有者那里夺取某些资源
3.打破请求与保持
进程在运行前申请得到所有的资源,否则该进程不能进入准备执行状态
。
避免总是请求其他的资源
4.打破循环等待
避免出现资源申请环路,即对资源事先分类编号,按号分配。
参考文章:进程死锁及解决方案
死锁的公式
理解:众多的进程都差一个资源 这一个资源跑来跑去的 保证不发生死锁
目标:资源总数应该确保众多的进程之间还有至少1个资源是于富的
公式:资源 大于 进程个数*(每个线程需要的最大资源总数-1)
m>n*(w-1)
习题:
一台计算机有8台磁带机,它们由N个进程竞争使用,每个进程可能需要3台磁带机。请问N为多少时,系统没有死锁危险
总资源:8
8> n(3-1)
n<4 n小于4的时候都可以