首页 > 技术文章 > 死锁问题

topass123 2020-04-22 21:14 原文

死锁的概念

  所谓死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,

它们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁。

死锁产生的四个必要条件

互斥条件:一个资源每次只能被一个进程使用;若其他进程申请使用该资源,必须等到该资源被释放为止;

请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;

不可剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺;

循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系;

破坏死锁。

互斥条件不可以破坏。

打破请求与保持条件:

可以实行资源预分配策略(进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行),或者

只允许进程在没有占用资源时才可以申请资源。(一个进程可申请一些资源并使用它们,但是在当前进程申请更多资源之前,它必须全部释放当前所占有的资源)

打破不可剥夺条件

允许进程可以强制剥夺资源,从而破坏不可剥夺条件。

死锁避免的基本思想 
  死锁避免的基本思想是动态地检测资源分配状态,以确保循环等待条件不成立,从而确保系统处于安全状态。所谓安全状态是指:如果系统能按某个顺序为每个进程分配资源(不超过其最大值),那么系统状态是安全的,换句话说就是,如果存在一个安全序列,那么系统处于安全状态。资源分配图算法和银行家算法是两种经典的死锁避免的算法,其可以确保系统始终处于安全状态。

注意银行家算法:

  该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者的请求。这样申请者就可以很快完成其计算,然后释放它占用的资源,从而保证了系统中所有进程都能完成,所以可避免死锁的发生。

推荐阅读