你如何在PROMELA中广播消息?

时间:2014-02-06 17:47:54

标签: c spin promela

所以我想要的是进程A广播一条消息来说明进程B到D.如何做到这一点?这样做的正确方法似乎是在A和进程B到D之间有通道,然后只是将相同的消息发送到从B到D的每个进程,如下所示。

chanA2B ! message
chanA2C ! message
chanA2D ! message

这是在PROMELA中模仿广播的正确方法,还是有适当的操作员这样做?

1 个答案:

答案 0 :(得分:1)

Promela没有'广播';所有渠道都是点对点的。

你希望广播是原子的,但如果你只是用原子包裹三个消息发送,那么:

 atomic { a2b ! msg; a2c ! msg; a2d ! msg }

然后a proctype可以阻止任何两个发送。你可以试试:

atomic { !nfull(a2b) && !nfull(a2b) && !nfull(a2c) -> a2b ! msg; …}

我认为,因为布尔谓词是一个单独的表达式,所以当所有队列都有空格时,后续的发送将是真正的原子。