如何交错这些过程?

时间:2018-05-16 02:49:49

标签: multithreading concurrency parallel-processing multiprocessing

我刚开始学习交错,我有一个程序包含以下两个过程:

流程#1:

    shared int x;
    x = 7;
    while true {
       x = x - 1;
       x = x + 1;
       if (x != 7)
          printf("x is %d", x);

流程#2:

    shared int x:
    x = 7;
    while true {
       x = x - 1;
       x = x + 1;
       if (x != 7)
          printf("x is %d", x);

如果对交错的顺序没有限制,我如何订购或交错这两个过程以便打印“x为7”?

1 个答案:

答案 0 :(得分:0)

打印“x为7”的过程在执行if-test时必须“看到”x不是-7,但是x必须在printf()时变为7读取其值以将其打印出来。所以,像:

Process #1:   x = x - 1;  // x becomes 6
Process #2:   x = x - 1;  // x becomes 5
Process #1:   x = x + 1;  // x becomes 6
Process #1:   if (x != 7) // if-test succeeds, because x is 6
Process #2:   x = x + 1;  // x becomes 7
Process #1:   printf("x is %d", x);  // prints "x is 7"

请注意,这只是以上可能发生的一种方式;特别是如果没有原子地修改x,由于寄存器分配,CPU缓存交互,编译器使用“as”优化和重新排序代码,还有许多其他方式可能会使事情变得奇怪。 - 如“规则等”