quinlan

死锁的必要条件和处理

死锁的必要条件:

  1. 互斥:同一时间内只有一个进程使用一个资源
  2. 持有并等待:一个进程持有至少一个资源并等待其他进程所持有的资源
  3. 非抢占:一个资源只能由持有它的进程主动释放,而不能被其它进程抢占
  4. 循环等待:存在P0等待P1,P1等待P2……Pn等待P0的情况

出现死锁,必出现四个条件;出现四个条件,不一定死锁。

死锁的处理方式:

  1. 预防:保证任一条件不出现,限制资源的请求方式
    1. 消除互斥,对于共享资源可行,对于非共享资源不可行(它必须是互斥的)
    2. 消除持有并等待,执行前一次性请求所有资源(缺点:申请的资源可能很久之后才使用,很难一次性分配太多资源);请求资源前先释放所有资源
    3. 消除非抢占,请求资源不可得时,允许抢占资源(只能用于状态可以保存和恢复的资源)
    4. 消除循环等待,资源的线性排序和按序分配(可以考虑在应用程序中使用这一方案)  
  2. 避免:允许出现前三个条件,资源分配之前考察是否会出现死锁,来决定是否给资源申请分配资源,改善了资源利用率,但需要额外的信息
    1. 单资源实例-->资源分配图算法
    2. 多资源实例-->银行家算法
  3. 检测
    1. 单资源实例-->等待图中存在环
  4. 恢复
    1. 进程的角度:一次性终止所有进程或者一个一个终止线程
    2. 资源的角度:抢占资源  
  5. 视而不见(Unix的策略),考虑到处理代价>死锁危害
posted on 2017-10-22 14:48  quinlan_l  阅读(155)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章: