死锁检测示例:Dedan 环境的应用
1. “两个信号量” 模型
1.1 模型概述
在这个示例中,有两个分布式计算,分别运行在各自的服务器上,它们使用两个信号量,每个信号量位于不同的服务器。以下是相关的代码表示:
A1:
A2:
sem1.wait;
sem2.wait;
sem2.wait;
sem1.wait;
sem1.signal;
sem2.signal;
sem2.signal;
sem1.signal;
stop
stop
当 A1 持有 sem1 并等待 sem2,同时 A2 持有 sem2 并等待 sem1 时,系统会陷入完全死锁。但如果我们在服务器 r 上添加另一个代理进程 A3,它只是简单地循环并执行自己的计算,情况就会发生变化。A3 的代码如下:
A3:
loop {
r.left;
r.right
}
此时系统不是完全死锁,而是部分死锁。部分死锁很难用模型检查技术识别,因为没有系统状态是 “没有未来的状态”。在这个系统中,代理 A1 和 A2 的终止并非不可避免(死锁并不意味着终止)。使用 IMDS,可以通过提出的通用公式识别 A1 和 A2 的部分死锁,这些公式表明这些代理缺乏终止条件。而代理 A3 不终止是预期的,因为它在一个没有终止动作的无限循环中工作。
1.2 验证环境
验证是在 Dedan 环境中进行的,Dedan 由一个规范部分和 TempoRG 模型检查器组成。这个
超级会员免费看
订阅专栏 解锁全文
36

被折叠的 条评论
为什么被折叠?



