死锁以及死锁的解决办法

本文介绍了两种常见的死锁产生情况:同一互斥量加锁两次及两个线程分别持有不同锁时相互等待对方持有的锁。并提出了两种预防措施:一是确保每次加锁后及时解锁并验证加锁状态;二是采用尝试加锁的方式,在无法获取所需全部锁时主动释放已获取的锁。

一.产生死锁的两种方式

 1.线程试图对同一个互斥量加锁2次.__一般情况下不出出现这种情况.
 2.有两把锁L1,L2,两个共享数据V1,V2,

L1拿到A锁,

L2拿到B锁,

此时L1再去请求B锁,

L2去请求A锁.

二.如何避免给上述两种死锁的产生

1.加锁完成后立即解锁.检查上次加锁的正确性.
2.调用trylock函数,(不能获取所有锁时,主动放弃现有的锁.)
当L1拿到A锁,
再去获取B锁时,
如果获取失败,
将会放弃现有的锁.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值