当前位置: 首页 > news >正文

如何避免死锁呢?

转自:

避免死锁

下文是笔者收集的避免死锁的方法,如下所示:

加锁顺序

多个线程时间需要使用相同顺序的锁,采用此种方式可避免死锁发生
如下所示:

Thread 1:
  lock A 
  lock B

Thread 2:
   wait for A
   lock C (when A locked)

Thread 3:
   wait for A
   wait for B
   wait for C

加锁时限

另一个避免死锁的方法:“ 就是为锁设置一个超时时间,当一个线程在指定时间内未获取到相应锁时,则会释放所有获取的锁 ”

死锁检测

死锁检测是可以更好的预防死锁机制
当一个线程获取锁,将线程和锁信息记录到一个Map中,当其它线程请求时,我们可以去map中检测以下是否存在锁信息
如:
线程A请求锁2,但是锁2这个时候被线程B持有,这时线程A就可以检查一下线程B是否已经请求了线程A当前所持有的锁
如果线程B确实有这样的请求,那么就是发生了死锁(线程A拥有锁1,请求锁2;线程B拥有锁2,请求锁1)

相关文章:

  • Fedora36启用root,并且root直接通过ssh远程连接 2209010539
  • Slipped Conditions
  • 嵌套管程锁死
  • 图解LeetCode——1475. 商品折扣后的最终价格(难度:简单)
  • Java中的锁详解说明
  • GPIO相关介绍
  • 软件工程、软件生命周期、软件定义阶段、需求的层次/特征、概要设计、详细设计
  • 台式机电源更换笔记
  • 从文件资源管理器中隐藏文件
  • # Maven错误Error executing Maven
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (2020)Java后端开发----(面试题和笔试题)
  • lt;JVM调优gt;为什么内存过大?
  • InputMismatchException异常
  • 定时器及案例
  • 「面试题」如何实现一个圣杯布局?
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • android图片蒙层
  • Java程序员幽默爆笑锦集
  • JWT究竟是什么呢?
  • MaxCompute访问TableStore(OTS) 数据
  • Netty 4.1 源代码学习:线程模型
  • Otto开发初探——微服务依赖管理新利器
  • Spring Boot MyBatis配置多种数据库
  • Terraform入门 - 3. 变更基础设施
  • 分布式事物理论与实践
  • 数组的操作
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 我建了一个叫Hello World的项目
  • 写代码的正确姿势
  • 学习Vue.js的五个小例子
  • 找一份好的前端工作,起点很重要
  • 自定义函数
  • 阿里云移动端播放器高级功能介绍
  • 从如何停掉 Promise 链说起
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #pragma 指令
  • (libusb) usb口自动刷新
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (第一天)包装对象、作用域、创建对象
  • (四)linux文件内容查看
  • (原)Matlab的svmtrain和svmclassify
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 后台导出excel ,word
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?