关于死锁

来源:互联网 发布:火车头采集本地数据 编辑:程序博客网 时间:2024/05/18 01:34

什么是死锁?

死锁是指两个或两个以上的进程(线程)在执行过程中,因为竞争资源而形成一种相互等待的现象,而是没有外力的作用的话,他们将无法继续推进下去。


例如,交叉持锁死锁的状态,如图



死锁产生的4个必要的条件

(1)互斥条件:某一个时刻一个资源只允许一个进程(线程)所占有。

(2)请求和保持条件:进程(线程)在某一时刻至少拥有一个资源,在申请其他资源的时候,如果其他资源被占用,他将挂起等待,并且对自己所拥有的资源不进行释放。直到获得其他资源以后他才释放。

(3)不剥夺条件:一个进程(线程)在占用一个资源的使用期间,不可以强行剥夺,只能在他使用完毕以后自行释放。

(4)环路等待条件:多个进程(线程)必定产生了头尾相接的等待资源的关系。


死锁的处理方法

(1)预防死锁:(事先预防)只需要破坏产生死锁的四个必要的条件中的其中一个或者多个,来预防死锁。

(2)避免死锁:(事先预防)在资源的动态分配过程中,用某种方法去防止系统进入不安全的状态,从而避免死锁。

(3)检测死锁:(不需要事先预防)允许运行过程中发生死锁,只需要在系统发生死锁时能精确的定位到进程和资源,然后才去相应的措施,从系统中将死锁解除掉。

(4)解除死锁:(和检测死锁配套使用)常见的实施措施是撤销或挂起一些进程,再将这些资源分配给已阻塞的进程,使阻塞状态变成就绪状态,系统得以继续运行。



原创粉丝点击