死锁的四个必备条件

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

互斥

互斥很好理解。举个例子,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的哲学家(释放已持有资源)。

原文发布于微信公众号 - Android每日一讲(gh_f053f29083b9)

原文发表时间:2018-04-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获(下)

上一节(《4.1 SNIFFER(嗅探器)之数据捕获(上)》)中, 我们讲解了通过Raw Socket的方式来编写Sniffer的基本方法。 本节我们继续来编写...

58650
来自专栏积累沉淀

Java批处理

批处理 JDBC对批处理的操作,首先简单说一下JDBC操作sql语句的简单机制。 JDBC执行数据库操作语句,首先需要将sql语句打包成为网络字...

51850
来自专栏运维一切

ceph对象存储折腾记 原

###前言 一直想弄对象存储,以前弄过一次,不是很理解region是个什么东西,后来时间和工作上的原因没有再折腾,这两天闲了下来,再次折腾了一次。我是参考的ce...

18210
来自专栏Java 技术分享

Struts2 之 modelDriven & prepare 拦截器详解

37670
来自专栏向前进

【笔记】HybridApp中使用Promise化的JS-Bridge

背景: HybridApp,前端采用JS-bridge的方式调用Native的接口,如获取设备信息、拍照、人脸识别等 前端封装了调用库,每次调用Native接口...

35740
来自专栏蓝天

Oops错误

在at91rm9200下写了一个spi的驱动,加载后,运行测试程序时,蹦出这么个吓人的东西: Unable to handle kernel paging r...

11810
来自专栏非典型技术宅

Swift多线程:GCD进阶,单例、信号量、任务组1. dispatch_once,以及Swift下的单例2. dispatch_after3. 队列的循环、挂起、恢复4. 信号量(semaphore

33250
来自专栏大内老A

如何让普通变量也支持事务回滚?

有一次和人谈起关于事务的话题,谈到怎样的资源才能事务型资源。除了我们经常使用的数据库、消息队列、事务型文件系统(TxF)以及事务性注册表(TxR)等,还有那些资...

19080
来自专栏君赏技术博客

建议大型项目用上Try Catch建议大型项目用上Try Catch

我们在平时项目做功能的时候,经常会遇到崩溃的情况。如果是我们在开发测试阶段,我们可以找到原因修复。但是遇到已经上线,出现这种问题。要么使用JSPatch进行热修...

9310
来自专栏开发技术

shiro源码篇 - shiro的session的查询、刷新、过期与删除,你值得拥有

    老公酷爱网络游戏,老婆无奈,只得告诫他:你玩就玩了,但是千万不可以在游戏里找老婆,不然,哼哼。。。     老公嘴角露出了微笑:放心吧亲爱的,我绝对不会...

40520

扫码关注云+社区

领取腾讯云代金券