陷入并发编程示例,伪代码(原子动作/细粒度原子性)

Cof*_*fee 2 concurrency multithreading imperative-programming shared-memory

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

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

int y = 0, z = 0;
co x = y+z; // y=1; z=2; oc;
Run Code Online (Sandbox Code Playgroud)

"如果x = y + z通过使用y加载寄存器然后向其添加z来实现,则x的最终值可以是0,1,2或3."

2?2如何工作?

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

got*_*o10 5

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

顺序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')