如果有人能用下面的代码向我解释为什么我会超时,那就太好了。我理解,或者至少我认为我理解超时的想法,但对于do循环,我认为这将阻止这一点。任何建议都是值得感谢的。
mtype wantp = false;
mtype wantq = false;
mtype turn = 1;
active proctype p()
{
do
:: printf ("non critical section for p\n");
wantp = true;
(wantq ==true);
if
:: (turn == 2)->
wantp = false;
/* wait for turn ==1*/
(turn ==1);
wantp = true;
fi;
printf("CRITICAL SECTION for P\n");
turn = 2;
wantp = false;
od
}
active proctype q()
{
do
:: printf("non critical section for q\n");
wantq = true;
(wantp ==true);
if
:: (turn == 1)->
wantq = false;
(turn ==2);
wantq = true;
fi;
printf("CRITICAL SECTION for Q\n");
turn = 1;
wantq = false;
od
}发布于 2013-03-19 14:54:03
当您执行旋转验证并出现问题时,例如“超时”,您就得到了所谓的“跟踪”文件。跟踪文件显示了导致问题的整个程序执行的确切路径。
假设上面的文件名为test.pml。您可以执行以下操作:
$ spin -a test.pml
$ gcc -o pan pan.c
$ ./pan
# info about verification, shows timeout
# view the detailed trail file
$ spin -p -t test.pml然后,查看打印出来的详细信息,找出超时是如何发生的。
https://stackoverflow.com/questions/15490691
复制相似问题