当前位置:网站首页>死锁的产生条件和预防处理[通俗易懂]
死锁的产生条件和预防处理[通俗易懂]
2022-07-07 18:44:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。因为资源占用是相互排斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续执行。这就产生了一种特殊现象死锁。
尽管进程在执行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备下面四个必要条件。
1)相互排斥条件:
指进程对所分配到的资源进行排它性使用,即在一段时间内某资源仅仅由一个进程占用。假设此时还有其他进程请求资源,则请求者仅仅能等待,直至占有资源的进程用毕释放。
2)请求和保持条件:
指进程已经保持至少一个资源。但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程堵塞,但又对自己已获得的其他资源保持不放。
3)不剥夺条件:
指进程已获得的资源,在未使用完之前,不能被剥夺,仅仅能在使用完时由自己释放。
4)环路等待条件:
指在发生死锁时,必定存在一个进程——资源的环形链。即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源。P1正在等待P2占用的资源。……。Pn正在等待已被P0占用的资源。
在系统中已经出现死锁后,应该及时检測到死锁的发生,并採取适当的措施来解除死锁。眼下处理死锁的方法可归结为下面四种:
1) 预防死锁。
这是一种较简单和直观的事先预防的方法。
方法是通过设置某些限制条件。去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。预防死锁是一种较易实现的方法,已被广泛使用。可是因为所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量减少。
2) 避免死锁。
该方法相同是属于事先预防的策略。但它并不须事先採取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
3)检測死锁。
这样的方法并不须事先採取不论什么限制性措施。也不必检查系统是否已经进入不安全区,此方法同意系统在执行过程中发生死锁。
但可通过系统所设置的检測机构,及时地检測出死锁的发生,并精确地确定与死锁有关的进程和资源。然后採取适当措施,从系统中将已发生的死锁清除掉。
4)解除死锁。
这是与检測死锁相配套的一种措施。当检測到系统中已发生死锁时。须将进程从死锁状态中解脱出来。
经常使用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于堵塞状态的进程。使之转为就绪状态,以继续执行。
死锁的检測和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116453.html原文链接:https://javaforall.cn
边栏推荐
- 华为CE交换机下载文件FTP步骤
- Update iteration summary of target detection based on deep learning (continuous update ing)
- 使用枚举实现英文转盲文
- I Basic concepts
- 凌云出海记 | 易点天下&华为云:推动中国电商企业品牌全球化
- 恶魔奶爸 A3阶段 近常速语流初接触
- Guava multithreading, futurecallback thread calls are uneven
- 写了个 Markdown 命令行小工具,希望能提高园友们发文的效率!
- 如何满足医疗设备对安全性和保密性的双重需求?
- Cantata9.0 | 全 新 功 能
猜你喜欢
Optimization cases of complex factor calculation: deep imbalance, buying and selling pressure index, volatility calculation
恶魔奶爸 B3 少量泛读,完成两万词汇量+
Mysql子查询关键字的使用方式(exists)
H3C s7000/s7500e/10500 series post stack BFD detection configuration method
Apifox 接口一体化管理新神器
不落人后!简单好用的低代码开发,快速搭建智慧管理信息系统
Klocwork code static analysis tool
【论文阅读】MAPS: Multi-agent Reinforcement Learning-based Portfolio Management System
H3C S7000/S7500E/10500系列堆叠后BFD检测配置方法
Implement secondary index with Gaussian redis
随机推荐
写一下跳表
Data sorting in string
恶魔奶爸 A0 英文零基础的自我提升路
POJ 1742 coins (monotone queue solution) [suggestions collection]
Lingyun going to sea | saihe & Huawei cloud: jointly help the sustainable development of cross-border e-commerce industry
[solution] package 'XXXX' is not in goroot
使用高斯Redis实现二级索引
使用枚举实现英文转盲文
字符串中数据排序
[function recursion] do you know all five classic examples of simple recursion?
MySQL约束之默认约束default与零填充约束zerofill
使用camunda做工作流设计,驳回操作
Precautions for cjson memory leakage
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
恶魔奶爸 A1 语音听力初挑战
Flask1.1.4 Werkzeug1.0.1 源码分析:路由
Flask1.1.4 werkzeug1.0.1 source code analysis: Routing
最新版本的CodeSonar改进了功能安全性,支持MISRA,C ++解析和可视化
Cantata9.0 | new features
How to choose financial products? Novice doesn't know anything