[总结]死锁

一、概念

  死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 ——《百度百科》

二、四个必要条件

  死锁的出现一定需要以下四个必要条件,缺一不可:

  1.互斥条件,每次资源只能被一个进程所使用.

  2.请求与保持,当一个进程/线程去请求新资源而被阻塞时,还保持着原有的资源不放.

  3.不剥夺条件,对于一个进程/线程,除非它主动归还资源,否则,无法强行剥夺.

  4.循环等待条件,A等待B的资源,B等待C的资源,C等待D的资源,D等待A的资源.

三、避免死锁的算法

  1.鸵鸟算法,对于出现的问题,进行忽略.

  2.银行家算法,在分配资源之前进行计算,看看分配完成后是否会产生死锁.其所遵循原则如下:

  a.进程对资源的最大需求量 < 系统所具有的资源量

  b.进程可以分期请求资源,但要求分期请求资源总量 < 系统所具有的资源量

  c.当 进程所需资源量  > 系统所具有资源量 时,推迟分资源配.

  d.系统现有资源 >= 进程所需资源 时,且 系统现有资源  >= 进程所需最大资源.

四、解决死锁

  1.死锁预防,随意破坏产生死锁的四个必要条件.

  2.死锁避免,采取死锁避免的算法.

  3.死锁检测:判断系统是否处于死锁状态.

  4.死锁解除:当出现死锁时,将死锁进程的资源强行剥夺回收,分配给其它进程.

posted @ 2017-06-08 10:33  Linux专题站  阅读(168)  评论(0编辑  收藏  举报