并发程序中的死锁如何形成,又应如何预防、检测与恢复
简答题中等1008 次浏览
参考答案与解析
# 核心结论
死锁是多个线程、进程或事务形成相互等待关系,其中每个执行单元都无法取得继续运行所需的资源。经典死锁同时依赖四个条件:资源具有互斥性;执行者持有部分资源并继续等待其他资源;资源不能被安全强制抢占;等待关系形成环。工程中最容易实施和验证的预防方式,是为资源建立全局一致的获取顺序,并缩短持有范围。无法彻底预防时,则需要结合等待超时、等待图检测、牺牲者回滚和安全重试进行恢复。
# 底层机制
假设线程甲持有锁甲并等待锁乙,线程乙持有锁乙并等待锁甲,两者就形成等待环。可以把线程或事务视为节点,将“等待另一个执行者持有的资源”表示为有向边;等待图存在环时,若相关资源均不可抢占,就表明发生了死锁。长时间阻塞并不一定是死锁
