词汇解读|死锁,其实也是有解的!
Posted 嵌入式资讯精选
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了词汇解读|死锁,其实也是有解的!相关的知识,希望对你有一定的参考价值。
每天辣么多的技术干货和前沿技术需要关注,但是在我们这个需要积累和沉淀的技术领域,好多的专业词汇,或许您早已跟它混了个脸熟,然而这个词汇背后的东西您或许还不知道。在以后的日子里,我们会定期发送一些嵌入式行业的词汇解读,敬请关注!
今天我们说说死锁!
听起来就是难题
莫怕
其实它也是有解的!
An unwanted software situation in which an entire set of tasks is blocked,. If a deadlock occurs, the only solution is to reset the hardware. However, it is usually possible to prevent deadlocks altogether by following certain software design practices.
一种不希望出现的软件状态,如果死锁发生,唯一解决的方法是重启动硬件。但是,通过可靠的软件设计实践活动通常可以防止死锁的发生。
死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。实际上,死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。
形象理解就是这样的:
在一条河上有一座桥,桥面较窄,只能容纳一辆汽车通过,无法让两辆汽车并行。如果有两辆汽车A和B分别由桥的两端驶上该桥,则对于A车来说,它走过桥面左面的一段路(即占有了桥的一部分资源),要想过桥还须等待B车让出右边的桥面,此时A车不能前进;对于B车来说,它走过桥面右边的一段路(即占有了桥的一部分资源),要想过桥还须等待A车让出左边的桥面,此时B车也不能前进。两边的车都不倒车,结果造成互相等待对方让出桥面,但是谁也不让路,就会无休止地等下去,这种现象就是死锁。
如果把汽车比做进程,桥面作为资源,那麽上述问题就描述为:进程A占有资源R1,等待进程B占有的资源Rr;进程B占有资源Rr,等待进程A占有的资源R1。而且资源R1和Rr只允许一个进程占用,即:不允许两个进程同时占用。结果,两个进程都不能继续执行,若不采取其它措施,这种循环等待状况会无限期持续下去,就发生了进程死锁。
在计算机系统中,涉及软件,硬件资源都可能发生死锁。例如:系统中只有一台CD-ROM驱动器和一台打印机,某一个进程占有了CD-ROM驱动器,又申请打印机;另一进程占有了打印机,还申请CD-ROM。结果,两个进程都被阻塞,永远也不能自行解除。
产生死锁的原因?
(1) 因为系统资源不足;
(2) 进程运行推进的顺序不合适;
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的解除与预防
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。
所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。
2.
3.
4.
6.
7.
8.
9.
以上是关于词汇解读|死锁,其实也是有解的!的主要内容,如果未能解决你的问题,请参考以下文章
浅谈 PHP递归的理解(递归听起来很高端的词汇 其实就是两次循环)