死锁检查与超出范围的数组查找Uppaal

时间:2014-04-23 09:51:05

标签: model-checking

当我在模型上的Verifier中运行A[] not deadlock查询时,验证会停止并显示错误:

  

验证因错误而中止。最有可能的是,这是   由超出范围的赋值或超出范围的数组查找引起的。

这是否意味着我的模型是无死锁的,直到"超出范围的赋值或超出范围的数组查找"会发生什么?

2 个答案:

答案 0 :(得分:0)

如果能够回答查询,UPPAAL继续搜索状态空间是没有意义的。所以我认为你可以假设UPPAAL的状态空间部分设法搜索是无死锁的。

请记住,可能会通过多条跟踪达到错误状态,但这依赖于您的模型。

听起来你已经知道为什么会出现这个错误。您可以尝试通过向模型添加保护!willCauseError()来修复它,以确保您永远不会处于此错误状态。这本身可能会导致僵局。为避免这种情况,您可以使用相反的警卫willCauseError()添加从相关位置到自身的转换。这会强制程序进入活锁而不是死锁。

答案 1 :(得分:-1)

解决方案是在检查死锁时使用索引变量扩展查询,例如

A[] not deadlock || indexVarble => 24

因此,如果存在死锁,则应该在我们超出范围时。 (在示例中,范围是[0-23])