PROMELA语言提供了两种强大的机制用于验证并发系统:远程引用(remote references)和进程变量引用。这些机制使得在不引入额外状态变量的情况下,能够精确描述系统状态和属性。
远程引用(Remote References)
远程引用允许你直接引用进程中的控制位置(label),语法格式为:进程名@标签名
。这种引用返回一个布尔值,表示该进程是否处于指定的控制位置。
在临界区问题中,可以这样使用远程引用:
active proctype P() {
do
:: wantP = true; // 表达进入临界区的意愿
!wantQ; // 检查Q是否不在临界区
cs: wantP = false; // 临界区开始的标签
od
}
active proctype Q() {
do
:: wantQ = true; // 表达进入临界区的意愿
!wantP; // 检查P是否不在临界区
cs: wantQ = false; // 临界区开始的标签
od
}
// 使用远程引用定义互斥条件
#define mutex !(P@