我的book提供了一个简单的例子,我有点困惑:
它说,“考虑以下程序,并假设细粒度的原子动作正在读取和写入变量:”
int y = 0, z = 0;
co x = y+z; // y=1; z=2; oc;
“如果通过使用y加载寄存器然后将z添加到其中来实现x = y + z
,则x的最终值可以是0,1,2或3.”
2? 2如何工作?
注意:co启动并发进程,//表示并行运行语句
答案 0 :(得分:5)
在你的程序中有两个平行序列:
序列1:x = y+z;
序列2:y=1; z=2;
序列1的操作是:
y
将y的值复制到寄存器中。+ z
将z的值添加到寄存器中的值。x =
将寄存器的值复制到x。序列2的操作是:
y=1;
将y的值设置为1。z=2;
将z的值设置为2。这两个序列同时运行,但序列中的步骤必须按顺序进行。因此,您可以按以下顺序获取x值“2”:
y=0
z=0
y
将y的值复制到寄存器中。 (注册值现在为'0')y=1;
将y的值设置为1.(对结果没有影响,我们已经将y复制到寄存器中)z=2;
将z的值设置为2。+ z
将z的值添加到寄存器中的值。 (注册值现在为'2')x =
将寄存器的值复制到x中。 (x的值现在为'2')答案 1 :(得分:0)
由于假设它们并行运行,我认为当分配x = y + z出现时,更简单的情况可能是y = 0,z = 2。