如何在 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) } 

但是,无论哪种方式,上面的第一段代码显示了如何在需要时使其成为非原子的。