避免活跃性危险

避免活跃性危险

在安全性和活跃性之间通常存在某种制衡。即我们在用加锁来保证安全性的时候,可能会引发死锁。

死锁

对于死锁 有个经典的问题,哲学家就餐,五个哲学家 坐在一个圆桌上,他们中间放着一根筷子,但是只有拿起两字筷子时才能就餐。那么就可能出现五人都无法就餐的情形。

即,大家都在持有别人想要的资源,且在等待别人的资源,又在得到前不会放弃手里的资源。

锁顺序死锁

当两组任务以不同的顺序来获取两个锁,那么就有可能发送死锁。

动态锁顺序死锁

原理和上面类似,就是任务获取锁的顺序有时候相同,有时候不同。

资源死锁

正如前面所说,当多个线程互相持有对方需要的锁且不释放自己的锁会发生死锁。把锁换成资源也是同样的道理。

如两个线程等待线程池资源,a线程持有A池的连接,去等待B池的连接。b线程持有B池的连接,去等待A池的连接。我们可以看到,假如我们能保证它们是相同的顺序,那么就不会出现这个问题。

死锁的避免与诊断

如果一个线程只能获取一个锁或者资源,那么就不会出现死锁。当然这种情况不能强求,那么我们应该保证线程获取锁的顺序一致。其实通过我们上面一系列的分析,这个顺序一致是破除死锁的关键。

支持定时的锁

我们知道死锁发生还有一个条件,就是一直等待别人的锁,那么要是我不是等待,那么就不会发送,而显示锁的tryLock的时间就可以满足这一点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值