以下算法尝试强制互斥 在两个进程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中对此代码进行建模?
谢谢。
答案 0 :(得分:0)
这应该非常简单:
active proctype P() {
bit sema = 0;
do
:: atomic {
sema == 0 -> sema = 1
}
// critical section
sema = 0
od
}
如果在你的代码中你只需要一些主动等待,你可能不需要do
循环。只有sema
设置为0,原子块才可执行,然后立即执行。 Spin有一个内置的被动等待语义。