什么死锁:
是两个或者两个以上的进程由于竞争资源而造成的的一种相互等待的线性,如无外力作用,这些进程将永远不能再向前推进。
陷入死锁状态的进程称为死锁进程,所占用的资源或者需要他们进行某种合作的进程就会相继陷入死锁,最终可能导致整个系统瘫痪
死锁的常见情形:
一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁正是被自己占用着的,该线程又被挂起而没有机会释放锁, 因此 就永远处于挂起等待状态了,这叫做死锁(Deadlock)。但只有一个线程一般情况下是不会去加锁的。
另一种典型的死锁情形是这样:线程A获得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线 程A和B都 永远处于挂起状态了。这样就是一个环路等待,产生了死锁。
资源的分类:
根据资源的性质:可剥夺(抢占)和不可剥夺(抢占)资源
可抢占资源:一资源占有进程虽然需要使用该资源,但另一个进程却强行把资源从占有进程中抢占过来。(cpu,主存,硬盘)
不可抢占资源;除了占有进程主动释放资源外,其他进程不得在占有进程使用资源的时候强行抢占。(打印机,读卡器)
产生死锁的必要条件:
1、互斥条件:
一个进程一次只能被一个进程所使用
2、不可抢占条件:
一个资源仅能被它的占有进程所释放,不能被别的进程抢占。
3、请求和保持条件:
进程至少已经保持了至少一个资源,但又提出了新的资源要求,而该资源又被其他进程所占用,此时请求进程阻塞,但是又对它已经获得的资源部释放,此时别的进程如果申请它的资源就也会出现阻塞。
4、环路等待条件:
当每类资源只有一个的时候,在发生死锁的时候,必然会出现一个资源的环形链。P1在等待P2占有的一个资源S2,P2在等待P1占有的一个资源S1;
看资源分配图判断是否发生死锁
看是

本文探讨了死锁的概念,即两个以上进程因资源竞争而陷入无限等待的现象。阐述了死锁的常见情况,包括同一线程两次加锁和线程间的环路等待。资源分为可剥夺和不可剥夺,死锁的必要条件包括互斥、不可抢占、请求和保持、环路等待。介绍了判断和避免死锁的方法,如鸵鸟算法、预防死锁(破坏请求和保持、环路等待条件)、避免死锁的银行家算法,以及检测和解除死锁的策略。
最低0.47元/天 解锁文章
527

被折叠的 条评论
为什么被折叠?



