Model 普罗米拉:什么是交错?

Model 普罗米拉:什么是交错?,model,model-checking,promela,spin,Model,Model Checking,Promela,Spin,假设我们有一段代码: int x = 3; int y = 5; int z = 0; active proctype P(){ if :: x > y -> z = x :: else -> z = y fi } active proctype Q(){ x++ } active proctype R(){ y = y - x } 我不明白交错是什么。在我上面的例子中,交织的确切含义是什么,在哪里以及有多少?在Pro

假设我们有一段代码:

int x = 3;
int y = 5;
int z = 0;

active proctype P(){
   if
      :: x > y -> z = x
      :: else -> z = y
   fi
}

active proctype Q(){
    x++
}

active proctype R(){
    y = y - x
}
我不明白交错是什么。在我上面的例子中,交织的确切含义是什么,在哪里以及有多少?

在Promela中,如果当前没有其他进程正在执行可执行指令,则可以计划在任何给定的时间点执行带有可执行指令的进程

一条指令本身就是原子执行的。为了在同一原子序列中有多条指令,可以使用或。我请你参考一下这本书,以了解两者的区别


在您的情况下,可能的执行跟踪是:

x++           // Q(), x := 4
z = y         // P(), z := 5
y = y - x     // R(), y := 1
y = y - x     // R(), y := 2
x++           // Q(), x := 4
z = x         // P(), z := 4
另一个完全可接受的可能执行跟踪是:

x++           // Q(), x := 4
z = y         // P(), z := 5
y = y - x     // R(), y := 1
y = y - x     // R(), y := 2
x++           // Q(), x := 4
z = x         // P(), z := 4
这些进程彼此交错,这意味着在某个进程
p_i
(不在不间断的原子序列中)的每条指令之后,进程
p_i
可以被抢占,而另一个进程
p_j
可以被安排执行(前提是它实际上必须执行某些东西)

这与多任务unix机器中发生的情况没有什么不同,在多任务unix机器中,进程彼此交错并竞争对CPU的访问