死锁通常是因为你使用了锁。 在python里可以直接使用Queue,它自带了锁。你不需要自己设置一个锁。
所以严格来说,在python中,不需要锁。如果用到了锁,特别是多线程处理。要采用队列方式去解决,就没有这个问题了。
如果一定要用锁就存在死锁的情形。比如一个锁依赖另一个锁,在某种情形下,两者都打不开。特别是多线程的时候。
通常我们的办法是,在线程里设置一个心跳变量。在主线程里检查这个变量。如果一个线程长时间心跳停止 ,应该是死了。死锁也包括在内。
解:不会有发生死锁的可能性。
在本题中,进程p1和p2都使用的资源集合是{a,b},由于进程p2在申请a之前已经释放了b,不存在占有b并且申请a的情况,所以进程p1和p2之间不满足死锁的四个必要条件,不会产生死锁;
进程p1和p3都使用的资源集合是{e,f,g},进程p1和p3都是先申请资源e,这两个进程同时申请资源,那么只能有一个进程先获得e,另一个进程将因为得不到e而阻塞,获得e的进程将进一步顺利获得资源f和g,从而运行结束,释放资源e,f和g,唤醒另一个进程运行。可见,进程p1和p3之间不会产生死锁;
进程p2和p3都使用的资源集合是{c,d},由于进程p2在申请d之前已经释放了c,不存在占有c并且申请d的情况,所以进程p2和p3之间不满足死锁的四个必要条件,不会产生死锁。
综上所述,当P1、P2、P3并发执行时,没有发生死锁的可能性。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.350秒