死锁产生原因,如何避免死锁

死锁发生在四个条件同时满足时:互斥、请求并持有、不可剥夺和环路等待。互斥条件是指资源一次只能被一个线程使用;请求并持有是线程已持有一个资源并请求新的资源;不可剥夺是线程不会被强制释放已有资源;环路等待是资源请求形成环状链。避免死锁的一种方法是破坏其中一个条件,例如要求线程一次性请求所有资源或在请求新资源未满足时释放已有资源。
摘要由CSDN通过智能技术生成

死锁产生的四个条件

  1. 互斥条件
  2. 请求并持有
  3. 不可剥夺条件
  4. 环路等待条件

互斥条件:该资源同时只由一个线程占用。如果有其他线程请求获取该资源,则请求者只能等待,直至占有资源的线程释放该资源。

请求并持有条件:指一个线程已经持有了一个资源,但又提高了一个新资源请求,而新资源已被其它线程占有,当前线程会阻塞,但阻塞的同时并不会释放自己已经获取的资源。

不可剥夺条件:指线程获取到的资源在自己使用完之前不能被其它线程抢占,只有在自己使用完毕后才由自己释放该资源。

环路等待条件:指在发生死锁时,必然存在资源环形链。

怎么避免死锁呢?(至少破环死锁发生的一个条件)

互斥是锁的特性,我们无法破坏。

  1. 请求并持有:一次性请求所有的资源
  2. 不可剥夺:当一个已经持有了一些资源的进程在提出新的资源请求没有得到满足时,它必须释放已经保持的所有资源,待以后需要使用的时候再重新申请,不可抢占这个条件就破环掉了
  3. 环路等待:通过定义资源线性访问,将每一个资源编号,当资源占用编号为i的资源时,那么下次申请只能申请编号大于i的资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值