浅析死锁

什么是死锁?

  死锁就是两个或多个进程在执行的过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,当进程处于这种状态时,如果没有外力的作用,这些进程都无法继续向前进行。这是操作系统层面的一个错误,是进程死锁的简称。

产生死锁的原因:
资源竞争

  系统中额资源分为可剥夺资源和不可剥夺资源。可剥夺资源指的是某进程在获得这类资源后,这份资源还可以继续被其他进程或者系统所获得,CPU和主存均属于可剥夺资源,比如说可以把一个进程从一个存储区移到另一个存储区。不可剥夺资源指的是系统把资源分配给某个进程后,就不能强行把这份资源收回,只能在该进程结束后自行释放,比如说一个进程正在使用打印机打印一份文件,这时如果要给这个打印机重新分配一个进程,那么打印出来的文件一定会受损,所以只能等这个进程结束了,自己释放这个打印机。
   通俗说:可剥夺资源就是你正在吃的馒头,当你刚拿起馒头时,一个比你彪悍的人和你要这个馒头,你就得给他。不可剥夺资源就是你已经吃进肚子里的馒头,这个彪悍的人想和你要这个已经吃了的馒头也要不到。
  产生死锁中有关资源竞争的其中一个就是竞争不可剥夺资源,就按上面的例子,当P1正在使用A打印机的时候,如果P2也要使用打印机A,那么打印机A就会阻塞
产生死锁中有关资源竞争的另一个就是竞争临时资源,这些临时资源一般有中断、信号、消息等,通常消息通信顺序进行不当时,就会产生死锁。

产生死锁的4个必要条件

1、互斥条件
2、请求与保持条件
3、不可剥夺条件
4、环路等待条件
互斥条件:在同一时刻只有一个线程可以操作
请求与保持条件:嘴里吃着馒头,还想要隔壁桌上的馒头,隔壁桌子上的馒头吃不着,自己的也不放
不可剥夺条件上面已经给出
环路等待条件:A拿着A的馒头去请求B的馒头,同时B又拿着B的馒头去请求A的馒头,这样就造成了一个环路

在这里插入图片描述

预防死锁:

  破坏四个必要条件中的一个或几个条件,易于实现,但会导致资源利用率和系统吞吐量降低,有效预防死锁的三个方案:
  a.舍弃“请求和保持”条件:要求所有的进程一次性申请完所需的全部资源,不出现资源等待
  b.舍弃“不剥夺”条件:如果进程已经保持了资源,如果他在提出新的资源要求并且不能立刻满足,这个进程就必须释放自己已经保持的所有资源,以后需要重新申请。
  c.舍弃“环路等待”条件:将资源进行分类并按顺序排列,所有进程请求资源时必须严格按照排列好的递增次序来进行,不出现环路情况。

避免死锁:

  可以采用银行家算法和死锁检测算法来避免产生死锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值