避免死锁的方法

Posted 费元星的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了避免死锁的方法相关的知识,希望对你有一定的参考价值。

 

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

以上是关于避免死锁的方法的主要内容,如果未能解决你的问题,请参考以下文章

计算机操作系统 死锁 -- 产生死锁的必要条件死锁的处理方法(鸵鸟策略死锁检测与死锁恢复死锁预防死锁避免)

计算机操作系统 死锁 -- 产生死锁的必要条件死锁的处理方法(鸵鸟策略死锁检测与死锁恢复死锁预防死锁避免)

计算机操作系统 死锁 -- 产生死锁的必要条件死锁的处理方法(鸵鸟策略死锁检测与死锁恢复死锁预防死锁避免)

死锁产生的原因及避免死锁的方法

避免死锁示例

如何触发(不避免!) HttpClient 死锁