在捡起东西的瞬间 “拿起” 物品,“拿起” 的物品会变成 “捡起” 的物品
v = "$1";
// Expected timing
// InHand = v;
Event(pickup) {
v = "$99";
Inventory.append(v);
}
// Actual timing
InHand = v;
Therac-25 Incident (1985-1987)
在更早的产品中,使用电路互锁 (interlock) 在 assert fail 时停机
assert mode in [XRay, Electron]
assert mirror in [On, Off]
assert not (mode == XRay and mirror == Off)
原子性 + 异步执行假设导致的灾难
问题修复后……
最终解决方法