我有一个需要澄清的并发程序。第一个程序被认为是原子的,而第二个不是。
注意:这里的//
注释并不意味着它 - 它们的意思是它是另一个与另一个同时执行的进程。
这是第一个:
int x = 0, y = 0;
co
x = y + 1; // y = y + 1;
oc
上面的程序可以被认为是原子的——但我不明白为什么会这样。但是下一个程序不是。
int x = 0, y = 0;
co
x = y + 1; // y = x + 1;
oc
我知道原子动作是一种编程指令,它可以不可分割地改变计算机系统的状态,也知道从寄存器加载和存储值是典型的原子动作。那么上面发生了什么?