如何在非原子方式中对Promela中的布尔AND评估进行建模?
我想对声明while (flag[j] == true && victim == i)
进行建模,其中AND-evaluation应该以非原子方式进行。
这怎么可能?
答案 0 :(得分:1)
loop:
if
:: flag[j] != true -> goto done
:: else
fi;
if
:: victim != i -> goto done
:: else
fi;
/* body of 'while' */
goto loop;
done:
/* after 'while' */
注意,虽然我面前没有Spin环境,但是你认为条件首先是什么?我会测试类似的东西:
byte i = 0
i++ >= 0 && i-- >= 0
never { assert (1 == i) }
但无论如何,上面的第一个代码展示了如果需要的话如何使它成为非原子的。