面试题答案
一键面试可能出现死锁的条件
- 资源互斥:共享资源在同一时刻只能被一个进程使用,即这些共享资源具有排他性。例如,打印机资源在某一时刻只能被一个进程占用进行打印任务。
- 占有并等待:进程已经占有了一些资源,同时又在等待获取其他进程所占有的资源。比如,进程A已经获取了资源R1,同时又请求资源R2,而资源R2此时被进程B占有。
- 不可剥夺:进程所占有的资源在其未主动释放之前,不能被其他进程强行剥夺。例如,进程B获取的资源R2,在进程B没有完成任务并主动释放R2之前,其他进程不能强行获取R2。
- 循环等待:存在一组进程,每个进程都在等待下一个进程所占有的资源,形成一个循环等待链。例如,进程A等待进程B所占有的资源R2,进程B等待进程C所占有的资源R3,而进程C又等待进程A所占有的资源R1。
死锁发生时整个系统的状态变化
- 网络通信
- 通信量异常:节点之间为了获取资源可能持续发送请求消息,导致网络通信量急剧增加。因为各个进程不断尝试获取被其他进程占有的资源,不断重复发送资源请求消息。
- 消息阻塞:大量的资源请求和响应消息在网络中传输,可能导致网络拥塞,消息传输延迟甚至阻塞。这会进一步影响节点之间正常的协调和资源分配机制。
- 通信死循环:在死锁状态下,节点之间的通信可能陷入一种死循环。例如,进程A向进程B发送获取资源R2的请求,进程B因为等待进程C的资源无法响应进程A,而进程C又等待进程A的资源,这样就会形成通信死循环,不断地重复发送和等待消息。
- 资源分配
- 资源停滞:共享资源被占有进程锁定,但这些进程因为死锁无法继续推进,导致资源一直处于被占用但未有效使用的停滞状态。例如,资源R1被进程A锁定,进程A因等待资源R2无法释放R1,而其他进程也无法获取R1,R1就一直处于闲置占用状态。
- 资源分配混乱:由于死锁的存在,基于时间戳的分布式锁机制可能无法正常工作,导致资源分配策略失效。可能出现多个进程都认为自己可以获取资源的情况,进一步加剧系统混乱。
- 资源浪费:死锁发生后,被占用的资源不能被有效利用,造成了资源的浪费。同时,系统为了处理死锁,可能需要额外的资源开销,如进行死锁检测和恢复操作等,进一步加重了资源浪费。