当前位置:网站首页>死锁的产生条件和预防处理[通俗易懂]
死锁的产生条件和预防处理[通俗易懂]
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
边栏推荐
- JNI 初级接触
- C语言多角度帮助你深入理解指针(1. 字符指针2. 数组指针和 指针数组 、数组传参和指针传参3. 函数指针4. 函数指针数组5. 指向函数指针数组的指针6. 回调函数)
- AADL inspector fault tree safety analysis module
- 让这个CRMEB单商户微信商城系统火起来,太好用了!
- Implement secondary index with Gaussian redis
- Codesonar Webinar
- Spark 判断DF为空
- Measure the height of the building
- AADL Inspector 故障树安全分析模块
- 【网络原理的概念】
猜你喜欢
【OpenCV 例程200篇】223. 特征提取之多边形拟合(cv.approxPolyDP)
95年专注安全这一件事 沃尔沃未来聚焦智能驾驶与电气化领域安全
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
Nebula Importer 数据导入实践
Small guide for rapid formation of manipulator (12): inverse kinematics analysis
【C语言】指针进阶---指针你真的学懂了吗?
Small guide for rapid formation of manipulator (11): standard nomenclature of coordinate system
Network principle (1) - overview of basic principles
AADL inspector fault tree safety analysis module
Implement secondary index with Gaussian redis
随机推荐
Deep learning model compression and acceleration technology (VII): mixed mode
How does codesonar help UAVs find software defects?
Is embedded system really safe? [how does onespin comprehensively solve the IC integrity problem for the development team]
图扑数字孪生煤矿开采系统,打造采煤“硬实力”
恶魔奶爸 A1 语音听力初挑战
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
反诈困境,国有大行如何破局?
写了个 Markdown 命令行小工具,希望能提高园友们发文的效率!
[solution] package 'XXXX' is not in goroot
Dachang classic pointer written test questions
使用 BR 恢复 Azure Blob Storage 上的备份数据
Cantata9.0 | new features
论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》
Useful win11 tips
静态测试工具
数值法求解最优控制问题(〇)——定义
实战:sqlserver 2008 扩展事件-XML转换为标准的table格式[通俗易懂]
Airiot helps the urban pipe gallery project, and smart IOT guards the lifeline of the city
Mongodb learn from simple to deep
Is it safe to open a stock account at present? Can I open an account online directly.