如何交错这些进程?



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

流程#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 is 7"?

打印"x is 7">

的过程必须在执行 if-test 的那一刻"看到"x 不是 7,但是当 x 读取其值以打印出来时,x 必须变为 7printf()。 所以,像这样:

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-if"规则优化和重新排序代码等。

相关内容

  • 没有找到相关文章

最新更新