如何预防死锁?

这个我们先来看下什么是死锁:
死锁:线程在对同一把锁进行竞争的时候,未抢占到锁的线程会等待持有锁的线程释放锁后继续抢占,如果两个或两个以上的线程互相持有对方将要抢占的锁,互相等待对方先行释放锁就会进入到一个循环等待的过程,这个过程就叫做死锁。
知道了死锁概念之后,我们再来看下死锁产生的四个必要条件:
1、互斥条件 同一时间只能有一个线程获取资源。
2、不可剥夺条件 一个线程已经占有的资源,在释放之前不会被其它线程抢占
3、请求和保持条件 线程等待过程中不会释放已占有的资源
4、循环等待条件 多个线程互相等待对方释放资源
那么如何破坏这四个条件呢?
1.由于资源互斥是资源使用的固有特性,无法改变,我们不讨论
2.破坏不可剥夺条件
一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释
放重新加入到系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的
资源以及新申请的资源才可以重新启动执行
3. 破坏请求与保持条件
第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源,
第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源
4. 破坏循环等待条件
采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的
编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编
号的进程。
那么解决死锁问题,就变得简单了,只要我们破坏这四个条件之一即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值