75、死锁的概念

内容提要

  • 产生死锁与饥饿的原因;
  • 解决死锁的方法
  • 死锁/同步的经典问题:哲学家进餐问题

定义

  • 一组进程因为竞争系统资源或是进程之间通信不当(原因),而被永久阻塞(定义),就是死锁;
  • 目前为止还没有一个有效的方法能解决死锁,只能尽量规避;
  • 大多情况下通常涉及到两个或以上的进程竞争资源而产生的冲突,但是也存在单进程死锁
  • 如同我们的十字路口,在一条道路上,十字路口是来往车辆高度竞争的关键点,如果没有恰当的控制管理,没有红绿灯,那么很有可能每个路口都会堵车,没有人前来疏导,那么很有可能就一直堵死在这里;
  • 在这里插入图片描述

举例

两个进程P,Q,两个进程的执行如下:
Process P:Get A ->… -> Get B -> … -> Release A -> … -> Relase B…
Process Q:Get B ->… -> Get A -> … -> Release B -> … -> Relase A…
这两个进程单独执行都没有问题,但是如果并发执行,就会有问题了。
在这里插入图片描述
可以看到,1,2,4,6执行线都是没有问题的,但是3,4执行线是会造成死锁的;
另外,死锁与进程的推进顺序无关,我们无法判断系统中具体在什么时间中断哪一个进程;但是,如果我们修改了进程P的代码,则不会产生死锁
Process P … -> Get A -> … -> Relase A -> … -> Get B -> … -> Release B -> …
在这里插入图片描述
此时可以看到 3,4执行线的通道就打开了;
但是,我们怎么可能这么去写代码呢,我们一般不会去用完了然后马上释放,这对于用户来说是很不好的体验;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值