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

时间:2014-04-13 20:36:59

标签: multithreading concurrency process promela

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

在查看术语时,我的直觉告诉我,使用线程同时运行多个进程,这是正确的吗?

3 个答案:

答案 0 :(得分:3)

如果您将进程想象为(可能是无限的)语句序列/跟踪(例如通过循环展开获得),那么几个进程的可能交错集合包含任何这些进程的所有可能的语句序列。 / p>

考虑例如过程

int i;

proctype A() {
  i = 1;
}

proctype B() {
  i = 2;
}

然后可能的交错是i = 1; i = 2i = 2; i = 1,即i的可能最终值是1和2.这当然可能更复杂,例如在存在时保护语句:然后交错序列中的下一个可能语句不一定是下一个程序计数器位置的语句,而只是那些保护程序允许的语句;例如考虑proctype

proctype B() {
  if
    :: i == 0 -> i = 2
    :: else   -> skip
  fi
}

然后可能的交错(前面给出A())是i = 1; skipi = 2; i = 1,因此i只有一个可能的最终值。

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

答案 1 :(得分:0)

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

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

||PLAY_PERFORM = (PLAYING || PERFORMING).

因此每个原始过程都可以显示为:(由LTSA模型 - cheking工具生成) enter image description here enter image description here

然后,作为交错行为的结果的可能痕迹将是:

dance -> play_music -> stop_music
play_music -> dance -> stop_music
play_music -> stop_music -> dance

以下是此示例的LTSA工具生成输出。 enter image description here

**注意:"任意"这意味着任意选择流程执行而不是它们的内部代码序列。每个进程中的代码执行将始终按顺序执行。

如果您仍然不满意,可以查看:https://www.doc.ic.ac.uk/~jnm/book/firstbook/pdf/ch3.pdf

希望它有所帮助! :)

答案 2 :(得分:0)

操作系统支持任务(或进程)。但现在让我们想想“活动”。

活动可以并行执行。这里有两个活动,P 和 Q:

    P:      abc
    Q:      def

a、b、c、d、e、f 是操作。 *

<块引用>

每次操作都具有相同的效果,与其他操作无关 操作可能同时执行(原子性)。

<块引用>

同时执行这两个活动的效果是什么?我们 不确定,但我们知道它将与获得的相同 通过顺序执行两个活动的 INTERLEAVING [交错也称为时间表]。以下是可能的 这两个活动的交错:

    abcdef
    abdcef
    abdecf
    abdefc
    adbcef
    ......
    defabc

也就是说,两个活动的操作以所有可能的方式进行排序,以保留操作在两个活动中出现的顺序。两个活动的串行交错 [串行计划] 是一种活动的所有操作先于另一活动的所有操作。 交错概念的重要性在于,它可以让我们表达并发程序的含义:活动的并行执行等价于这些活动的交错之一的顺序执行。

详细信息:https://cis.temple.edu/~ingargio/cis307/readings/interleave.html