所以我想要的是进程A广播一条消息来说明进程B到D.如何做到这一点?这样做的正确方法似乎是在A和进程B到D之间有通道,然后只是将相同的消息发送到从B到D的每个进程,如下所示。
chanA2B ! message
chanA2C ! message
chanA2D ! message
这是在PROMELA中模仿广播的正确方法,还是有适当的操作员这样做?
答案 0 :(得分:1)
Promela没有'广播';所有渠道都是点对点的。
你希望广播是原子的,但如果你只是用原子包裹三个消息发送,那么:
atomic { a2b ! msg; a2c ! msg; a2d ! msg }
然后a
proctype可以阻止任何两个发送。你可以试试:
atomic { !nfull(a2b) && !nfull(a2b) && !nfull(a2c) -> a2b ! msg; …}
我认为,因为布尔谓词是一个单独的表达式,所以当所有队列都有空格时,后续的发送将是真正的原子。