避免死锁的方法

简介: 死锁不仅仅是在使用锁的时候发生(尽管这是最常见的),创建两个线程,在每个线程中调用对方的join函数,这时候也会造成死锁。两个线程都在等待对方先结束。避免死锁有一个最简单的原则:如果这个线程可能等待你,那么你就不要等待这个线程。

 

死锁不仅仅是在使用锁的时候发生(尽管这是最常见的),创建两个线程,在每个线程中调用对方的join函数,这时候也会造成死锁。两个线程都在等待对方先结束。避免死锁有一个最简单的原则:如果这个线程可能等待你,那么你就不要等待这个线程。
1、避免给一个锁嵌套上锁
在持有一个锁的时候,不要再给这个锁上锁。如果使用多个锁,使用std::lock。
2、在持有锁时,不要调用别人提供的函数
因为你不清楚别人的代码怎么实现的,不知道它是不是在使用锁。
3、给多个锁上锁时,固定顺序。
如果在给多个所上锁,并且无法使用std::lock,最好的做法就是在每一个线程中,都按照同样的顺序。
4、分层次来使用锁
把程序分成几个层次。区分每个层次中使用的锁,当一个线程已经持有更低层次的锁时,不允许使用高层次的锁。可以在程序运行时给不同的锁加上层次号,记录每个线程持有的锁。
未来星开发团队--狒狒 QQ:9715234
相关文章
|
7月前
|
Java 编译器
Java多线程(4)---死锁和Synchronized加锁流程
Java多线程(4)---死锁和Synchronized加锁流程
48 0
|
4月前
|
算法 安全
解决死锁的方法
解决死锁的方法
|
4月前
|
Java 编译器 程序员
synchronized 原理(锁升级、锁消除和锁粗化)
synchronized 原理(锁升级、锁消除和锁粗化)
|
4月前
|
Java 程序员 调度
多线程之死锁
多线程之死锁
|
4月前
面试官:什么是死锁?死锁产生的原因?如何避免死锁?
面试官:什么是死锁?死锁产生的原因?如何避免死锁?
31 0
面试官:什么是死锁?死锁产生的原因?如何避免死锁?
|
5月前
|
Linux API C++
锁、避免死锁等相关
锁、避免死锁等相关
33 0
|
10月前
|
存储 关系型数据库 MySQL
面试官:解释下什么是死锁?为什么会发生死锁?怎么避免死锁?
开局先来个段子: 面试官: 解释下什么是死锁? 应聘者: 你录用我,我就告诉你 面试官: 你告诉我,我就录用你 应聘者: 你录用我,我就告诉你 面试官: 滚!
多线程死锁的产生以及如何避免死锁
指多个线程因竞争资源而造成的一种僵局(互相等待),具体代码就是同步中嵌套了其他同步,这种现象称为死锁:比如过独木桥问题,其他锁还有可重入锁、可中断锁、公平锁和同步锁
128 0
|
安全 Java
Java并发编程之Lock(同步锁、死锁)
这篇文章是接着我上一篇文章来的。
110 0
|
Java 编译器
Java多线程【锁优化与死锁】
Java多线程【锁优化与死锁】
Java多线程【锁优化与死锁】

热门文章

最新文章