一、什么是死锁?
- 死锁指在多线程情况下,线程陷入了相互等待的情况,这样就形成了死锁的僵局。若是没有外力的作用,程序将无法推进。
二、产生死锁的原因
-
从下图中可以看出T1在使用R1,T2在使用R2,然后T1又要去使用R2,但是R2正在被使用,于是T1阻塞在这里;同理,T2要去使用R1,但是R1正在被使用,于是T2阻塞在这里,。这个时候就形成了相互阻塞,也就是我们所的死锁现象。
三、案例
四、产生死锁有那必备的条件呢?
- 互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
- 不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
- 请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
- 循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源。