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

linux——死锁

造成死锁的原因:

1、自己锁自己

for(int i = 0;i<MAX;i++) { pthread_mutex_lock(&mutex); pthread_mutex_lock(&mutex); int crt = number; crt++; number = crt; printf("thread A id = %ld,number = %d\n",pthread_self(),number); pthread_mutex_unlock(&mutex); usleep(10); }

锁了两次,就会阻塞在第二个锁上,下面的代码也不会执行,自然也就不会解锁,就造成了死锁

锁了一次,但锁里的代码业务崩溃,也就执行不了解锁,或者忘记解锁,都会造成死锁,所以操作做完之后一定要解锁。

2、交叉互锁

pthread_mutex_t mutexA, mutexB; // 线程1 void* func1(void* arg) { pthread_mutex_lock(&mutexA); // 持有A sleep(1); // 模拟业务 pthread_mutex_lock(&mutexB); // 等待B -> 死锁! } // 线程2 void* func2(void* arg) { pthread_mutex_lock(&mutexB); // 持有B sleep(1); pthread_mutex_lock(&mutexA); // 等待A -> 死锁! }

线程1 对共享资源A加锁成功-A锁

线程2 对共享资源B加锁成功-B锁

线程1访问共享资源B,对B锁加锁-线程1阻塞在B锁上

线程2访问共享资源A,对A锁加锁-线程2阻塞在A锁上

3、如何解决呢?

让线程按照一定顺序去访问共享资源

在访问其他锁的时候需要先将自己的锁解开

trylock,这个是常识加锁,如果有锁就返回,不阻塞

http://www.jsqmd.com/news/604824/

相关文章:

  • 2026年华为数通HCIA培训怎么选?五家实力机构深度横评与决策指南 - 2026年企业推荐榜
  • OpenAI Assistants API 深度测评与开发指南
  • ESP8266 Wi-Fi连接管理库:基于Executor模式的异步状态机实现
  • GLM-OCR模型微调指南:LoRA适配私有文档风格,提升垂直领域准确率
  • Antd+Vue Select框性能优化实战:如何用懒加载解决千条数据卡顿问题
  • 2026重庆水泥河沙供应市场深度解析:龙海装饰为何成为优选伙伴? - 2026年企业推荐榜
  • C语言枚举类型:常量管理与工程实践
  • OpenClaw云端体验:星图平台千问3.5-9B镜像快速验证
  • Grafici-GFX:Arduino嵌入式数据可视化轻量库
  • Arduino设备控制库开发与ALM发布规范
  • 舵机控制技术与应用全解析
  • nRF24L01P专用Radio驱动库:确定性无线通信实践指南
  • ESP32轻量级线程安全CLI管理库设计与实践
  • 2026上海软件智能体服务商深度评测:如何选择你的AI增长引擎? - 2026年企业推荐榜
  • 5分钟搞定:用Python+Flask快速搭建天气预报API服务(附完整代码)
  • PHP 文件上传详解
  • 探寻温州高性价比本子源头:臻冠文具如何以实力定义行业标杆 - 2026年企业推荐榜
  • 配电网光伏储能双层优化配置模型:基于粒子群算法求解选址定容与运行调度联合优化
  • 避坑指南:若依Pro多数据源事务处理的3种正确姿势
  • 13.2W开关电源设计详解:从变压器计算到元器件选型
  • 2026深度解析:温州手工女鞋供应链五强格局与选型指南 - 2026年企业推荐榜
  • LD2410毫米波雷达UART通信库技术解析
  • Bootstrap5 表单浮动标签详解
  • 不锈钢外六角组合螺丝怎么选:河北不锈钢十字盘头组合螺丝/河北不锈钢圆柱头内六角组合螺丝/选择指南 - 优质品牌商家
  • 【源荷储再创新】小论文轻松发!基于雨流计数法的源-荷-储双层协同优化配置研究Matlab代码
  • 基于QT的跨平台串口调试工具开发实践
  • 5步搞定OpenClaw+Qwen3.5-9B:星图GPU镜像一键体验方案
  • Vue2集成cafe-ofd实现高效OFD文件预览方案
  • CH32软件I2C库:兼容Wire接口的GPIO模拟I2C解决方案
  • HR 系统怎么选?从功能、适配到性价比全维度解析