死锁是什么?有什么条件?怎样处理?

  1. 死锁是什么
  • 死锁是多个进程循环等待其他进程的资源而一直僵持下去的一种局面,多个进程无限期地阻塞等待下去。
  1. 四个必要条件
  • 互斥条件:一个资源仅同时被一个进程所调用
  • 请求与保持条件:一个进程由于请求资源而陷入死锁时,该进程会保持自身的资源而不释放
  • 不剥夺条件:一个资源在尚未被一个进程使用完全前,不能被其他进程强行占用
  • 循环等待条件:多个进程形成一种首尾相接地循环等待资源的情况
  1. 可以进行死锁的预防,避免,检测与解除
  • 预防:破除四个必要条件就行:
    破除互斥、破除请求与保持:一次性申请完所需资源,缺点:进程时动态执行的,无法提前知道所有的所需资源;破除不剥夺:在得到新的请求不被同意,可以将自身的资源释放,破除循环占用:对资源进行编号,进程调用资源严格按照编号顺序进行,未调用编号小的进程不能直接调用编号大的进程。
  • 避免:
    互斥、请求与保持、不依赖这三个必要条件可以出现,主要避免出现循环等待的局面,也即进程调用资源时,严格按照编号顺序进行,使得系统始终处于安全状态。银行家算法就是这样的。
  • 检测:对资源分配图进行环的检测,对进程节点进行深度优先遍历,对于已经遍历后的进程进行标记,如果在遍历过程中出现了已经被遍历的点,说明存在环路,有死锁问题的发生,但是如果进程-资源分配图中有环路且所涉及的资源类有多个资源,则不一定出现死锁。
  • 解除
    直接终止陷入死锁的进程,可以直接终止全部的死锁进程,也可以每次终止单个进程,直到进程-资源分配图中无环。

鸵鸟策略:如果发生死锁的概率低或者发生死锁产生的危害小,则不进行死锁的处理。
银行家算法:判断系统是否是安全状态,如果是安全状态,则进行资源的分配,反之则不进行资源的分配。

你可能感兴趣的:(C++开发八股文,开发语言,c++)