如何在promela / SP中建模此代码?

时间:2014-02-24 14:16:52

标签: spin promela

以下算法尝试强制互斥 在两个进程P1和P2之间,每个进程运行下面的代码。 您可以假设最初sema = 0。

while true do{
atomic{if sema = 0
then sema:= 1
else
 go to line 2}
critical section;
sema:= 0;
  }

如何在promela / SPIN中对此代码进行建模?

谢谢。

1 个答案:

答案 0 :(得分:0)

这应该非常简单:

active proctype P() {
  bit sema = 0;

  do
    :: atomic {
         sema == 0 -> sema = 1
       }

       // critical section

       sema = 0
  od
}

如果在你的代码中你只需要一些主动等待,你可能不需要do循环。只有sema设置为0,原子块才可执行,然后立即执行。 Spin有一个内置的被动等待语义。