当前位置:网站首页>死锁的产生条件和预防处理[通俗易懂]
死锁的产生条件和预防处理[通俗易懂]
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
边栏推荐
- 使用camunda做工作流设计,驳回操作
- 【C语言】指针进阶---指针你真的学懂了吗?
- 想杀死某个端口进程,但在服务列表中却找不到,可以之间通过命令行找到这个进程并杀死该进程,减少重启电脑和找到问题根源。
- 恶魔奶爸 指南帖——简易版
- 阿洛的烦恼
- OneSpin | 解决IC设计中的硬件木马和安全信任问题
- 上海交大最新《标签高效深度分割》研究进展综述,全面阐述无监督、粗监督、不完全监督和噪声监督的深度分割方法
- Airiot helps the urban pipe gallery project, and smart IOT guards the lifeline of the city
- Écrivez une liste de sauts
- Prometheus remote_write InfluxDB,unable to parse authentication credentials,authorization failed
猜你喜欢
Static analysis of software defects codesonar 5.2 release
Apifox interface integrated management new artifact
复杂因子计算优化案例:深度不平衡、买卖压力指标、波动率计算
Klocwork code static analysis tool
I wrote a markdown command line gadget, hoping to improve the efficiency of sending documents by garden friends!
ERROR: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
万字总结数据存储,三大知识点
OneSpin 360 DV新版发布,刷新FPGA形式化验证功能体验
Implement secondary index with Gaussian redis
MySQL约束之默认约束default与零填充约束zerofill
随机推荐
Mysql子查询关键字的使用方式(exists)
使用 BR 备份 TiDB 集群数据到 Azure Blob Storage
取两个集合的交集
华为CE交换机下载文件FTP步骤
恶魔奶爸 B1 听力最后壁垒,一鼓作气突破
[function recursion] do you know all five classic examples of simple recursion?
Phoenix JDBC
I wrote a markdown command line gadget, hoping to improve the efficiency of sending documents by garden friends!
C语言多角度帮助你深入理解指针(1. 字符指针2. 数组指针和 指针数组 、数组传参和指针传参3. 函数指针4. 函数指针数组5. 指向函数指针数组的指针6. 回调函数)
Is it safe to open a stock account at present? Can I open an account online directly.
awk处理JSON处理
Tensorflow2. How to run under x 1 Code of X
One click deployment of any version of redis
[concept of network principle]
让这个CRMEB单商户微信商城系统火起来,太好用了!
凌云出海记 | 易点天下&华为云:推动中国电商企业品牌全球化
I Basic concepts
九度 1201 -二叉排序数遍历- 二叉排序树「建议收藏」
Mongodb learn from simple to deep
[paper reading] maps: Multi-Agent Reinforcement Learning Based Portfolio Management System