多线程(进程)中死锁的产生和如何避免死锁

死锁

由于两个或者两个以上的(进程)去抢夺一份资源而造成阻塞的状态叫做死锁,
如果出现了死锁,会造成线程的循环等待,如果没有外力的帮助,就会一直维持着某种状态

死锁的产生

死锁的产生有如下四个必要条件
      1. 资源是互斥的,同一时刻只能有一个进程占有该资源
      2. 资源的释放只能有该进程自己完成
      3. 线程在获取到需要资源之前,不会释放已有资源
      4. 存在这么一条循环等待的队列,线程T1,T2,T3…, Tn
      T1持有自己的资源请求T2的资源,….Tn持有自己的资源请求T1的资源
      

典型的问题例如哲学家饥饿问题,在我另一片博客有提到,感兴趣的话不妨看看:
使用信号量解决哲学家饥饿问题

处理死锁的方式

死锁的预防

其实死锁的4个发生条件都是必要条件,也就是说4个条件缺一不可,我们可以通过破坏其中任意一个条件来预防死锁
#### 1.破坏资源的互斥性
这是不可能滴,在访问临界资源时,至少要保证对资源的访问是互斥的,例如一台打印机在任意一时刻只能打印一个文件

2.破坏不可抢占的条件

允许其他资源对资源的抢夺
方案 1.在该方案下,如果占有某些资源的进程在进一步申请资源被拒绝后,就必须释放原本占有的资源,如果有必要,则可以再次申请这些资源或者另外资源

方案 2. 如果一个进程请求当前被另一个进程占有的资源,则操作系统可以抢占另一个进程,要求它释放资源.当然这必须是在两个不同优先级的进程才能生效

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值