关于死锁的面试题:死锁的四个必要条件
·
1. 互斥条件
- 含义:资源具有排他性,同一时间只能被一个任务(进程、线程等,不同语境叫法有别,本质是执行单元 )占用。
- 举例:比如系统里的打印机,若一个文档打印任务正在用打印机,其他打印任务就得排队,不能同时使用,保证打印内容不混乱。这是很多独占型资源的特性,是死锁产生的基础,因为资源若能共享访问,就不会因争抢 “唯一使用权” 陷入死锁。
2. 请求与保持条件
- 含义:任务在已持有部分资源的情况下,又去请求新资源,同时不会释放已拿到的资源,“占着碗里,看着锅里” 。
- 举例:进程 P1 已经获取了文件 A,此时它需要访问数据库 B,于是向系统请求数据库 B,在拿到数据库 B 之前,它不会释放已经占有的文件 A。这样就可能和其他同样 “请求新资源且不释放已有资源” 的进程,因资源交叉请求产生死锁风险。
3. 不可剥夺条件
- 含义:任务已获得的资源,在自身主动释放前,其他任务或系统不能强制夺走,资源的控制权牢牢握在占有任务手里 。
- 举例:进程 P2 占用了系统的内存缓冲区资源用于数据处理,在它没完成数据处理、主动释放缓冲区前,系统不能为了给其他进程腾地方,强行把这个缓冲区收回分配给别人。若资源可随意剥夺,死锁时能通过 “抢夺资源” 打破循环,所以该条件是死锁持续的关键。
4. 循环等待条件
- 含义:多个任务之间形成一种环形的资源依赖关系,每个任务都在等待下一个任务释放自己需要的资源,形成 “你等我、我等他、他等你” 的循环闭环 。
- 举例:进程 P3 等待进程 P4 释放文件 C,进程 P4 等待进程 P5 释放数据库 D,进程 P5 又等待进程 P3 释放的内存块 E(假设场景里有这样的资源关联),三个进程互相等待对方释放资源,构成循环,要是同时满足前面三个条件,死锁就形成了。
这四个条件必须同时成立才会导致死锁,所以在面试中,除了记住这四个条件,还可以延伸说 “只要破坏其中任意一个条件,就能避免死锁发生”(比如用资源共享打破互斥、让进程请求新资源时释放已有资源打破请求与保持等 ),这样回答更完整,体现对死锁知识的深入理解~
更多推荐
所有评论(0)