死锁不仅仅是在使用锁的时候发生(尽管这是最常见的),创建两个线程,在每个线程中调用对方的join函数,这时候也会造成死锁。两个线程都在等待对方先结束。避免死锁有一个最简单的原则:如果这个线程可能等待你,那么你就不要等待这个线程。
1、避免给一个锁嵌套上锁
在持有一个锁的时候,不要再给这个锁上锁。如果使用多个锁,使用std::lock。
2、在持有锁时,不要调用别人提供的函数
因为你不清楚别人的代码怎么实现的,不知道它是不是在使用锁。
3、给多个锁上锁时,固定顺序。
如果在给多个所上锁,并且无法使用std::lock,最好的做法就是在每一个线程中,都按照同样的顺序。
4、分层次来使用锁
把程序分成几个层次。区分每个层次中使用的锁,当一个线程已经持有更低层次的锁时,不允许使用高层次的锁。可以在程序运行时给不同的锁加上层次号,记录每个线程持有的锁。
未来星开发团队--狒狒QQ:9715234 继续阅读与本文标签相同的文章
上一篇 :
java lambda 容易掉进的2个坑
下一篇 :
DMA是什么意思
-
centos7 lvm管理 把/home空间转移给/
2026-05-26栏目: 教程
-
随笔 - debian8 配置 WIFI
2026-05-26栏目: 教程
-
MySQL数据安全的双1模式简介
2026-05-26栏目: 教程
-
在cygwin上运行apache2
2026-05-26栏目: 教程
-
记一次异常停机损坏了orientdb 导致nexus2无法启动
2026-05-26栏目: 教程
