首页 > 其他 > 详细

避免死锁的方法

时间:2016-03-16 15:16:17      阅读:164      评论:0      收藏:0      [点我收藏+]

 

死锁不仅仅是在使用锁的时候发生(尽管这是最常见的),创建两个线程,在每个线程中调用对方的join函数,这时候也会造成死锁。两个线程都在等待对方先结束。避免死锁有一个最简单的原则:如果这个线程可能等待你,那么你就不要等待这个线程。
1、避免给一个锁嵌套上锁
在持有一个锁的时候,不要再给这个锁上锁。如果使用多个锁,使用std::lock。
2、在持有锁时,不要调用别人提供的函数
因为你不清楚别人的代码怎么实现的,不知道它是不是在使用锁。
3、给多个锁上锁时,固定顺序。
如果在给多个所上锁,并且无法使用std::lock,最好的做法就是在每一个线程中,都按照同样的顺序。
4、分层次来使用锁
把程序分成几个层次。区分每个层次中使用的锁,当一个线程已经持有更低层次的锁时,不允许使用高层次的锁。可以在程序运行时给不同的锁加上层次号,记录每个线程持有的锁。

避免死锁的方法

原文:http://www.cnblogs.com/feiyuanxing/p/5283632.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!