死锁

来源:互联网 发布:并发编程实战豆瓣 编辑:程序博客网 时间:2024/06/08 00:50

指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象

死锁发生的基本条件:

  • mutual exclusion 互斥
  • hold and wait 保持而且等待
  • no preemption 不能抢占
  • circular wait 循环等待

没环一定没死锁
这里写图片描述
有环可能有死锁
这里写图片描述
有环但是没死锁
这里写图片描述

所以,没环一定没死锁,有环可能有死锁

死锁解决策略

  1. 鸵鸟算法
    死锁就当没看见,死锁是由程序开发人员造成的,应该有开发人员来自行解决,操作系统不管。
  2. turn nonsharable to sharable(将资源共享):
    因为死锁就是相互在竞争同一个资源,所以将资源变成可共享的可以解决死锁问题

    • time-sharing 分时
    • virtual-combination 虚拟合并
      例如同时开两个音乐播放器,但事实上只能有一个进程拥有声卡这个资源,可以对其进行读写,所以如果没有虚拟合并的话,两首歌是不能同时播放的;虚拟就是为进程在内存中虚拟出一个声卡来,进程将数据写在内存中,然后由混音器将两个虚拟声卡中的数据运算成一种类似叠加的数据,然后输送到真实的声卡进行播放。
    • spooling 缓冲池
      应用于串行设备,例如打印机
  3. 当一个进程请求锁资源的时候判断一下,当分配给它时,会不会出现死锁。
    判断依据是,系统将所有请求该资源的进程进行一个排序,排序后的进程能够依次对该资源进行访问而且不发生死锁。

    这里写图片描述
    这是安全状态


    这里写图片描述
    这是不安全状态

    实现:资源分配图和银行家算法
    资源分配图

    这里写图片描述
    假设系统请求资源后,判断是否会出现环,如果有环那么就是不安全的,如果没环那么就是安全的。

    银行家算法:

    这里写图片描述
    找出能够满足所有进程请求的一种状态就可以

原创粉丝点击