3

我的提供了一个简单的例子,我对此有点困惑:

它说,“考虑以下程序,并假设细粒度的原子操作正在读取和写入变量:”

int y = 0, z = 0;
co x = y+z; // y=1; z=2; oc;

“如果x = y + z是通过加载一个带有y的寄存器然后添加z来实现的,x的最终值可以是0、1、2或3。”

2?2如何工作?

注意:co 启动一个并发进程和 // 表示并行运行的语句

4

2 回答 2

6

在您的程序中有两个并行序列:

序列1:x = y+z;

序列2:y=1; z=2;

序列1的操作是:

  1. y将 y 的值复制到寄存器中。
  2. + z将 z 的值与寄存器中的值相加。
  3. x =将寄存器的值复制到 x 中。

序列2的操作是:

  1. y=1;将 y 的值设置为 1。
  2. z=2;将 z 的值设置为 2。

这两个序列同时运行,尽管序列中的步骤必须按顺序发生。因此,您可以按以下顺序获得 x 值“2”:

  1. y=0
  2. z=0
  3. y将 y 的值复制到寄存器中。(寄存器值现在为“0”)
  4. y=1;将 y 的值设置为 1。(对结果没有影响,我们已经将 y 复制到了寄存器中)
  5. z=2;将 z 的值设置为 2。
  6. + z将 z 的值与寄存器中的值相加。(寄存器值现在是“2”)
  7. x =将寄存器的值复制到 x 中。(x 的值现在是 '2')
于 2011-10-16T04:21:21.737 回答
0

由于假设它们是并行运行的,我认为当赋值 x = y + z 发生时,更简单的情况可能是 y=0, z=2。

于 2011-10-16T05:17:38.447 回答