Multithreading 什么是进程交错?(在并发领域)

Multithreading 什么是进程交错?(在并发领域),multithreading,concurrency,process,promela,Multithreading,Concurrency,Process,Promela,我不太清楚这个词的意思。我在学习并发性的课程中看到了它。我看过很多关于数据交织的定义,但是我可以找到关于进程交织的任何东西 当看到这个术语时,我的直觉告诉我它是使用线程同时运行多个进程,对吗 如果您将一个进程想象为一个(可能无限)语句序列/跟踪(例如,通过循环展开获得),那么多个进程的可能交错集由这些进程的所有可能语句序列组成 以流程为例 int i; proctype A() { i = 1; } proctype B() { i = 2; } 然后,可能的交织是i=1;i=2和

我不太清楚这个词的意思。我在学习并发性的课程中看到了它。我看过很多关于数据交织的定义,但是我可以找到关于进程交织的任何东西


当看到这个术语时,我的直觉告诉我它是使用线程同时运行多个进程,对吗

如果您将一个进程想象为一个(可能无限)语句序列/跟踪(例如,通过循环展开获得),那么多个进程的可能交错集由这些进程的所有可能语句序列组成

以流程为例

int i;

proctype A() {
  i = 1;
}

proctype B() {
  i = 2;
}
然后,可能的交织是
i=1;i=2
i=2;i=1,即
i
的可能最终值为1和2。这当然可能更复杂,例如在存在受保护语句的情况下:那么交错序列中的下一个可能语句不一定是位于下一个程序计数器位置的语句,而只是受保护语句允许的语句;例如,考虑CopyType

proctype B() {
  if
    :: i == 0 -> i = 2
    :: else   -> skip
  fi
}
然后可能的交织(如前所述给定
A()
)为
i=1;跳过
i=2;i=1,因此,
i
只有一个可能的最终值


实际上,交错的概念对于Spin的并发性观点至关重要。在跟踪语义中,并发进程的可能跟踪集是单个进程跟踪的可能交错集。

它只是指以任意顺序执行(数据访问或执行或…)**(参见注释)。在并发的情况下,它通常指动作交错。 如果过程P和Q是并行组合(P | | Q),那么它们的动作将交错。考虑以下过程:

PLAYING = (play_music -> stop_music -> STOP).
PERFORMING = (dance -> STOP).

||PLAY_PERFORM = (PLAYING || PERFORMING).
因此,每个基本过程可以显示为:(由模型检查工具生成)

那么作为动作交错结果的可能轨迹将是:

dance -> play_music -> stop_music
play_music -> dance -> stop_music
play_music -> stop_music -> dance
下面是该示例的LTSA工具生成的输出。

**注意:“任意”在这里是指任意选择进程执行,而不是其内部代码序列。每个进程中的代码执行将始终按顺序进行

如果你仍然对它感到不舒服,你可以看看:


希望有帮助!:)

你能告诉我你为什么否决了我的问题吗?我认为这是有效的。。如果我做错了什么,请告诉我