Promela多个proctype实例的原子命题

时间:2015-03-26 11:31:17

标签: verification spin promela model-checking

我想知道如何编写永远不会声称代表所有proctype实例的声明。例如,如果我有以下命题:

#define c (camera_node[SomePid]:start_publishing == 0)

现在,如果我实例化camera_node的5个实例,我怎么能创建一个原子命题,检查所有这5个实例的start_publishing是否等于零?

1 个答案:

答案 0 :(得分:1)

嗯,它并不是最美丽的,但我过去做过这种事。 (注意:这段代码可能不是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) && ...)