【发布时间】:2021-03-10 16:58:45
【问题描述】:
我是旋转的初学者。我正在尝试让模型交替运行两个接收进程(模型中称为消费者的函数),即。 (消费者 1,消费者 2,消费者 1,消费者 2,...)。但是当我运行这段代码时,我的 2 个消费者进程的输出随机显示。有人能帮我吗? 这是我正在努力解决的代码。
mtype = {P, C};
mtype turn = P;
chan ch1 = [1] of {bit};
byte current_consumer = 1;
byte previous_consumer;
active [2] proctype Producer()
{`
bit a = 0;
do
:: atomic {
turn == P ->
ch1 ! a;
printf("The producer %d --> sent %d!\n", _pid, a);
a = 1 - a;
turn = C;
}
od
}
active [2] proctype Consumer()
{
bit b;
do
:: atomic{
turn == C ->
current_consumer = _pid;
ch1 ? b;
printf("The consumer %d --> received %d!\n\n", _pid, b);
assert(current_consumer == _pid);
turn = P;
}
od
}
【问题讨论】:
-
有两个生产者,您是否希望 1) 将每个生产者与给定的客户联系起来 2) 将每个客户与给定的值联系起来 3) 只强制执行交替行为,而不管生产者发送消息吗?
-
@PatrickTrentin,感谢您的评论。我现在正在尝试的是不。 (3) 选项。
-
我的答案已被编辑,有充分的理由,所以让我在这里说一下:欢迎来到 stackoverflow!
标签: model-checking promela spin