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启动并发进程,//表示并行运行的语句
在您的程序中有两个并行序列:
顺序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=0z=0y将y的值复制到寄存器中.(寄存器值现在为'0')y=1; 将y的值设置为1.(对结果没有影响,我们已经将y复制到寄存器中)z=2; 将z的值设置为2.+ z将z的值添加到寄存器中的值.(注册值现在为'2')x =将寄存器的值复制到x中.(x的值现在是'2')| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |