Spin语法

消息传递

消息通道用于对数据从一个过程到另一个过程的传输进行建模。它们在本地或全局上声明,如下所示:

chan qname = [16] of {short}

这将声明一个通道,该通道最多可以存储16个short类型的消息。通道名称可以通过通道从一个进程传递到另一进程,也可以作为进程实例化中的参数传递。如果要通过通道传递的消息具有多个字段,则声明可能如下所示:

chan qname = [16] of {byte,int,chan,byte}

这次,通道最多存储16条消息,每个消息由两个8位值,一个32位值和一个通道名组成。
语句qname!expr发送表达式expr的值给我们创建的通道,它将值添加到通道的末尾。
qname?msg接收消息,它从通道的开头检索它,并将其存储在变量msg中。通道以先进先出的顺序传递消息。在上述情况下,仅单个值通过通道。如果每条消息要传送一个以上的值,则在逗号分隔的列表中指定它们。

qname!expr1,expr2,expr3
qname?var1,var2,var3

每条消息发送或接收的参数比所使用的消息通道所声明的参数更多或更少,是错误的。按照惯例,第一个消息字段通常用于指定消息类型。因此,发送和接收操作的另一种等效表示法是指定消息类型,其后是用括号括起来的消息字段列表。一般来说:

qname!expr1(expr2,expr3)
qname?var1(var2,var3)

仅当寻址的信道未满时,发送操作才可执行。同样,仅当通道为非空时,接收操作才可执行。可选地&#x

你可能感兴趣的:(形式化验证,spin)