前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >死锁的四个必备条件

死锁的四个必备条件

作者头像
PhoenixZheng
发布2018-08-07 16:38:10
9070
发布2018-08-07 16:38:10
举报

今天来总结一下发生死锁的四个必备条件,他们分别是 · 互斥 · 不可剥夺 · 循环等待 · 请求和保持

互斥

互斥很好理解。举个例子,A进程和B进程都需要操作一个map,而这个map是唯一的。那么对这个资源的使用就是互斥的。

不可剥夺

这个条件的意思是,A进程在使用完某个资源前,这个资源是不会被其他进程所使用的,除非A主动释放。

循环等待

发生死锁的一个必要条件是当前进程队列产生了闭环。 很好理解,当有进程{p1,p2…pn},p2等待p1释放一个互斥资源,Pn等待Pn-1释放一个互斥资源,而P1等待Pn,那么久产生了闭环。

请求和保持

这个条件是说,当某个进程在请求新资源时,它不放弃原有的资源。

如何避免死锁

避免死锁,只要破坏死锁产生的条件就可以。一般有三种思路 · 破坏不可剥夺 · 破坏闭环 · 破坏请求和保持

破坏不可剥夺

从"不可剥夺"条件上来说,经常发生的情况是A进程持有了某个资源,此时它执行过程中发现需要其他资源,而且资源被其他进程持有,如果此时A进程不释放已经持有的资源,那么就有可能导致死锁。 破坏这个条件的原则是,如果当前不能获取到需要的所有资源,则进程等待状态,并且释放已持有的资源。

破坏请求和等待

这个思路的原则是一次性分配所有需要的资源。然而这种方法系统开销比较大。还有一种是动态的分配资源,并且在请求新资源的时候释放已经持有的资源。

破坏循环等待

基本思想是把资源顺序编号。以资源稀缺程度进行降序编号,申请资源时按编号进行,只有获取了较小编号的资源才能申请大编号的资源。 这么说不好理解,来看一个具体的例子。

哲学家吃饭问题

有五个哲学家坐在圆桌上,没人左手边有一根筷子。哲学家们必须拿到两根筷子才能吃饭。这就造成了一种可能出现的情况,每个哲学家都拿到了左手边的筷子,大家都没饭吃。

结合上面破坏循环等待的思想。我们可以给筷子顺序编号1-5,第一个哲学家左手边起第一根筷子编号1. 这样最后一个哲学家只有在持有编号为4的筷子时才有资格申请编号5的筷子。 这样当他拿不到5的筷子的时候,只能乖乖把编号4的筷子交给持有编号1的哲学家(释放已持有资源)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 互斥
  • 不可剥夺
  • 循环等待
  • 请求和保持
  • 如何避免死锁
    • 破坏不可剥夺
      • 破坏请求和等待
        • 破坏循环等待
          • 哲学家吃饭问题
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档