多个 proctype 实例的 Promela 原子命题
Promela atomic propositions for multiple proctype instances
我想知道如何编写 never claims that stand for all instances of proctype。例如,如果我有以下命题:
#define c (camera_node[SomePid]:start_publishing == 0)
现在,如果我实例化 camera_node
的 5 个实例,我如何创建一个原子命题来检查 start_publishing
是否对所有这 5 个实例都等于零?
嗯,这不是最漂亮的,但我以前做过这种事。 (注意:此代码可能不适合 Promela,但您明白了)
#define NUMBER_OF_CAMERA_NODES 5
pid_t cameraPids [NUMBER_OF_CAMERA_NODES];
byte_t cameraPidIndex = 0
active [NUMBER_OF_CAMERA_NODES] proctype cameraTask () {
atomic { cameraPids[cameraPidIndex++] = _pid }
// ...
}
#define cameraCheck( index ) (0 == camera_node[cameraPids[(index)]]:start_publishing)
#define checkAllCameras (cameraCheck(0) && cameraCheck(1) && ...)
我想知道如何编写 never claims that stand for all instances of proctype。例如,如果我有以下命题:
#define c (camera_node[SomePid]:start_publishing == 0)
现在,如果我实例化 camera_node
的 5 个实例,我如何创建一个原子命题来检查 start_publishing
是否对所有这 5 个实例都等于零?
嗯,这不是最漂亮的,但我以前做过这种事。 (注意:此代码可能不适合 Promela,但您明白了)
#define NUMBER_OF_CAMERA_NODES 5
pid_t cameraPids [NUMBER_OF_CAMERA_NODES];
byte_t cameraPidIndex = 0
active [NUMBER_OF_CAMERA_NODES] proctype cameraTask () {
atomic { cameraPids[cameraPidIndex++] = _pid }
// ...
}
#define cameraCheck( index ) (0 == camera_node[cameraPids[(index)]]:start_publishing)
#define checkAllCameras (cameraCheck(0) && cameraCheck(1) && ...)