我正在尝试使用类似CSP的同步机制,但我不明白为什么以下模型的初始状态是死锁:
const int N = 2;
chan a;
process Processes(int [1,N] pid) {
state A, B;
init A;
trans A -> B { sync a; };
}
system Processes;
我认为这两个过程在通道“ a”上是同步的,应该至少执行一个步骤,不是吗?
答案 0 :(得分:1)
系统声明需要包含IO
声明:
P1=Processes(1);
P2=Processes(2);
system P1, P2;
IO P1 {a}
IO P2 {a}
不幸的是,IO
声明不理解模板参数,因此我使用带有具体名称的完整实例化。
还有“ Modest”选项可启用不同的更新语义,例如:
x=y+z
使用y
和z
的旧值(在同步之前),以防同时修改y
和z
的情况。