死锁及如何避免

所谓死锁
是一组互相竞 争资源的线程
因互相等待
导致“永久”阻塞的现象
第二个是发生死锁的原因
发生死锁的原因有四个
第一个是互斥条件,共享资源 X 和 Y 只能被一个线程占用
第二个是指 占有且等待,线程 T1 已经取得共享资源 X
在等待共享资源 Y 的时候
不释放共享资源 X
第三个是不可抢占
其他线程不能强行抢占
线程 T1 占有的资源
第四个循环等待
线程 T1 等待线程 T2 占有的资源
线程 T2 等待线程 T1 占有的资源
跟着Mic学架构
这就是循环等待
第三个点是如何避免死锁呢?
既然发生死锁的原因是
需要同时满足这四个条件
我们只需要打破其中任意一个条件
即可避免死锁问题
而在这四个条件中
第一个互斥条件是无法被破坏的
因为锁本身就是通过
互斥来解决线程安全问题的
所以对于剩下三个
我们可以逐一进行分析
第一个是对于“占用且等待”这个条件
我们可以一次性申请所有的资源
这样就不存在等待了
第二个是对于“不可抢占”这个条件
占用部分资源的线程
进一步申请其他资源时
如果申请不到
可以主动释放它占有的资源
这样不可抢占这个条件就破坏掉了
第三个点
对于“循环等待”这个条件
可以靠按序申请资源来进行预防
所谓按序申请
是指资源是有线性顺序的
申请的时候可以先申请资源序号小的
再申请资源序号大的
这样线性化后自然就不存在循环等待了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值