c++锁与死锁

一.什么是死锁:

多个线程或进程在竞争资源时,产生一种僵持的现象,若无外力作用,无法推进。

二.产生死锁的原因

1.系统资源不足


2.进程推进顺序不当

三.产生死锁的必要条件

1.互斥条件            哲学家进餐
2.不剥夺条件        不能抢夺资源
3.请求和保持条件  
4.循环等待条件      形成闭环  ---充分条件

四.死锁的处理策略

1.预防死锁

破坏四个必要条件

破坏互斥条件 ---资源变为共享资源
破坏不剥夺条件 ---把原来资源释放掉
破坏请求和保持条件 ---
破坏循环等待 --- 按顺序申请资源 --会导致资源利用率变低


2.避免死锁

让系统处于安全状态,就不会产生死锁  --- 银行家算法

不安全状态,就可能发生死锁

银行家算法

总数100
  最大需求 已借走 最多还会借
a  70           20          50
b  40          10           30
t  50           30           20

剩余40

如果40被a借走,三个人都不能得到可以还款的钱,就会死锁

被b,c借走则不会,b借走30就能还款,或者c借走20能还款,所以这里不会把钱借给a


3.死锁的检测与解除

图 消除变法

五.死锁的解除

1.资源剥离法
2.撤销进程法
3.进程回退法

六.清除对象如何考虑 

1.进程优先级
2.已经执行时长
3.还有多长时间完成
4.进程已占用多少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值