Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
所以我想要的是进程 A 广播一条消息,说进程 B 到 D。这怎么做?这样做的正确方法似乎是在 A 和进程 B 到 D 之间建立通道,然后将相同的消息发送到从 B 到 D 的每个进程,如下所示。
chanA2B ! message chanA2C ! message chanA2D ! message
这是在 PROMELA 中模仿广播的正确方法,还是有合适的操作员这样做?
Promela 中没有“广播”;所有通道都是点对点的。
您希望广播是原子的,但如果您只是将三个消息发送包装在一个原子中,如下所示:
atomic { a2b ! msg; a2c ! msg; a2d ! msg }
那么aproctype 可以在任何两个发送之间阻塞。你可以试试:
a
atomic { !nfull(a2b) && !nfull(a2b) && !nfull(a2c) -> a2b ! msg; …}
我认为由于布尔谓词是单个表达式,当它为真时,所有队列都将有空间,因此后续发送将是真正的原子。