一.产生死锁的两种方式
1.线程试图对同一个互斥量加锁2次.__一般情况下不出出现这种情况.
2.有两把锁L1,L2,两个共享数据V1,V2,
L1拿到A锁,
L2拿到B锁,
此时L1再去请求B锁,
L2去请求A锁.
二.如何避免给上述两种死锁的产生
1.加锁完成后立即解锁.检查上次加锁的正确性.2.调用trylock函数,(不能获取所有锁时,主动放弃现有的锁.)
当L1拿到A锁,
再去获取B锁时,
如果获取失败,
将会放弃现有的锁.
本文介绍了两种常见的死锁产生情况:同一互斥量加锁两次及两个线程分别持有不同锁时相互等待对方持有的锁。并提出了两种预防措施:一是确保每次加锁后及时解锁并验证加锁状态;二是采用尝试加锁的方式,在无法获取所需全部锁时主动释放已获取的锁。
476

被折叠的 条评论
为什么被折叠?



