腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
操作系统
共 17 篇文章
加入清单架
1
真实字节二面:什么是伪共享?
2
CPU缓存一致性协议MESI
3
字节面:什么是伪共享?
4
冷月手撕408之操作系统(9)-进程同步与互斥
5
线程间同步的几种方式
6
线程同步的4种方式
7
互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
8
信号量、互斥锁、自旋锁、原子操作
9
孤儿进程和僵尸进程
10
线程死锁怎么产生的以及如何避免
11
什么是线程死锁以及如何避免死锁
12
线程、进程、多线程、多进程、多任务,傻傻分不清?
13
[Linux] 进程间通信
14
深入理解Linux内核进程上下文切换
15
socket阻塞与非阻塞,同步与异步I/O模型
16
动态链接
17
【建议收藏】MMU是如何完成地址翻译的?
清单首页
操作系统
文章详情
清单「操作系统」 10/17
线程死锁怎么产生的以及如何避免
joshua317
死锁产生的四个必要条件:
互斥:一个资源每次只能被一个进程使用(资源独立)
请求与保持:一个进程因请求资源而阻塞时,对已获得的资源保持不放(不释放锁)
不剥夺:进程已获得的资源,在未使用之前,不能强行剥夺(抢夺资源)
循环等待:若干进程之间形成一种头尾相接的循环等待的资源关闭(死循环)
避免死锁的方法:
第一个条件 "互斥" 是不能破坏的,因为加锁就是为了保证互斥
一次性申请所有的资源,破坏 "占有且等待" 条件
占有部分资源的线程进一步申请其他资源时,如果申请不到,主动释放它占有的资源,破坏 "不可抢占" 条件
按序申请资源,破坏 "循环等待" 条件
下一篇
举报
领券