大家好,欢迎来到IT知识分享网。
1、什么是死锁
所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
举个例子
2线程就是两个孩子,2锁其中一个是电池,另一个是电动汽车,a孩子拿着电池,b孩子拿着电动汽车,a想要b的车,b想要a的电池,谁也不肯退,所以谁也玩不上,都僵在那里就是死锁
解决方法,1、一次申请所有资源就是把玩具和电池放一起,只让一个孩子拿到2、主动释放就是有个孩子比较懂事,先让出自己的玩具部分3、玩具给幼儿园老师看着,只有拿到车的才发电池。
两个线程需要两个资源才能进行下去,一线程有一资源,二线程有二资源,一二线程要想进行下去都需要同时拥有两个资源。而双方都不会把手中已经得到的资源放出去,所以双方都不会凑齐两个资源,线程也就不会完成,只会一直等待对方放开资源,形成死锁。
或者说我要去药店买口罩,而进药店需要我带着口罩,这是就僵在这里。除非有外力因素否则不会打破这个情况。
2、死锁产生的4个必要条件?
产生死锁的必要条件:
互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
环路等待条件:在发生死锁时,必然存在一个进程–资源的环形链。
3、解决死锁的基本方法
预防死锁:
资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)
只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)
可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)
资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)
4、解除死锁:
当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:
剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;
撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25874.html