我听说过这两个术语,它们是相同的还是不同的东西?
答案 0 :(得分:30)
死锁:
死锁是指两个或多个竞争行为各自等待另一个完成的情况,因此两者都没有。它也可以定义为一组被阻止的进程,每个进程持有一个资源并等待获取该集合中另一个进程持有的资源。
例如,如果系统有两个磁盘驱动器。如果有两个进程P1和P2,每个进程保持一个磁盘驱动器,每个进程需要另一个磁盘驱动器,则发生死锁的情况。 如果出现死锁,将同时执行以下条件:
•相互排斥:一次只有一个流程可以使用资源
•保持并等待:持有至少一个资源的进程正在等待获取其他进程持有的其他资源
•没有先发制人:资源只能由持有它的进程自愿释放,在该进程完成任务后
•循环等待:存在等待进程的集合{P0,P1,...,Pn},使得P0正在等待P1持有的资源,P1正在等待P2持有的资源,...... ,Pn-1正在等待Pn持有的资源,Pn正在等待P0持有的资源。
死锁预防,避免和检测之间的差异如下:
<强>预防强>:
•目标是确保至少有一个必要的死锁条件永远不会成立。
•通常无法实现死锁预防。
•系统不需要有关每个流程的每种资源的总体潜在用途的额外先验信息。
•为了使系统能够防止死锁情况,它不需要知道现有,可用和请求的所有资源的所有细节。
•死锁预防技术包括非阻塞同步算法,序列化令牌,Dijkstras算法等。
•死锁预防的资源分配策略是保守的,它承诺资源。
•立即请求所有资源。
•在某些情况下,抢占的次数超过了必要的范围。
<强>避免:强>
•避免死锁的目标是系统不得进入不安全状态。
•通常无法实现死锁避免。
•系统需要有关每个流程的每种资源的总体潜在使用的额外先验信息。
•为了使系统能够确定下一个状态是安全还是不安全,它必须事先知道现有,可用和请求的所有资源的数量和类型。
•死锁避免技术包括银行家算法,等待/死亡,伤口/等待等。
•避免死锁的资源分配策略选择检测和预防之间的中途。
•需要操纵,直到找到至少一条安全路径。
•没有先发制人。
<强>检测:强>
•目标是在发生死锁或发生死锁之前检测死锁。
•在发生死锁之前检测死锁的可能性要困难得多,实际上通常是不可判定的。但是,在特定环境中,使用特定的锁定资源的方法,死锁检测可能是可判定的。
•在所有情况下,系统不需要有关每个流程的每种资源的总体潜在使用的额外先验信息。
•为了使系统检测到死锁条件,它不需要知道所有现有,可用和请求的所有资源的所有细节。
•死锁检测技术包括但不限于模型检查。这种方法构造了一个有限状态模型,在该模型上,它执行进度分析并在模型中找到所有可能的终端集。
•死锁检测的资源分配策略非常自由。资源按要求授予。
•需要定期调用以测试死锁。
•看到了抢占。
答案 1 :(得分:19)
您可以将其视为:
避免:不要跨进程/多个线程共享资源
预防:在收集共享资源时,请使用信号量。如果锁定多个信号量,请确保以与锁定相反的顺序解锁。始终确保在关键部分内处理错误,以便在所有条件下释放信号量。
答案 2 :(得分:3)
死锁避免:意味着,每当特定进程请求特定资源时,您查看可用资源,如果未来资源需要进程已在使用资源,则确定发生死锁的可能性资源被授予。如果可能,请不要授予资源,如果不可能,则授予资源。
死锁预防:确保在任何时候都不会满足至少一个发生死锁的情况。这可以通过在系统中请求和授予资源的方式来实现。
答案 3 :(得分:2)
1)预防:以一种避免死锁条件之一的方式构建系统
2)检测和恢复:让死锁发生,检测并采取措施 行动
3)避免: -不要启动其请求可能导致死锁的进程 -不要授予可能导致死锁的请求
答案 4 :(得分:1)
要发生死锁,应同时发生以下四个条件
防止死锁:我们可以通过确保至少一种情况永远不会发生来防止死锁。
避免死锁:系统可以通过确保系统始终处于安全状态来避免死锁。安全状态是指存在安全的过程序列。
例如:令P1,P2,P3为3个进程。如果可以用当前拥有的资源P2和系统拥有的资源满足P2的资源请求,则序列
如果系统不能确保预防或避免,那么应该有一种机制可以通过杀死进程来检测是否破坏了锁定。