[总结]死锁
一、概念
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 ——《百度百科》
二、四个必要条件
死锁的出现一定需要以下四个必要条件,缺一不可:
1.互斥条件,每次资源只能被一个进程所使用.
2.请求与保持,当一个进程/线程去请求新资源而被阻塞时,还保持着原有的资源不放.
3.不剥夺条件,对于一个进程/线程,除非它主动归还资源,否则,无法强行剥夺.
4.循环等待条件,A等待B的资源,B等待C的资源,C等待D的资源,D等待A的资源.
三、避免死锁的算法
1.鸵鸟算法,对于出现的问题,进行忽略.
2.银行家算法,在分配资源之前进行计算,看看分配完成后是否会产生死锁.其所遵循原则如下:
a.进程对资源的最大需求量 < 系统所具有的资源量
b.进程可以分期请求资源,但要求分期请求资源总量 < 系统所具有的资源量
c.当 进程所需资源量 > 系统所具有资源量 时,推迟分资源配.
d.系统现有资源 >= 进程所需资源 时,且 系统现有资源 >= 进程所需最大资源.
四、解决死锁
1.死锁预防,随意破坏产生死锁的四个必要条件.
2.死锁避免,采取死锁避免的算法.
3.死锁检测:判断系统是否处于死锁状态.
4.死锁解除:当出现死锁时,将死锁进程的资源强行剥夺回收,分配给其它进程.