如何在 Promela 中以非原子方式对布尔 AND 求值建模?
How do I model a boolean AND-evaluation in Promela non-atomically?
我如何在 Promela 中以非原子方式对布尔 AND 求值建模?
我想对语句 while (flag[j] == true && victim == i)
建模,其中 AND 求值应该以非原子方式完成。
这怎么可能?
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) }
但是,无论哪种方式,上面的第一段代码显示了如何在需要时使其成为非原子的。
我如何在 Promela 中以非原子方式对布尔 AND 求值建模?
我想对语句 while (flag[j] == true && victim == i)
建模,其中 AND 求值应该以非原子方式完成。
这怎么可能?
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) }
但是,无论哪种方式,上面的第一段代码显示了如何在需要时使其成为非原子的。