【发布时间】:2019-01-12 02:37:13
【问题描述】:
鉴于这段代码:
int x = 0;
co x:= x + 1 || x := x - 1 oc
显然可能的值为x = {0, -1, 1}。
我试图了解这是如何发生的,我读到了原子语句,当它们发生时它们才会发生。
书中给出的例子是我们可以将语句x := x + 1分解成原子语句。
READ X (R1) INC WRITE(W1)
和
x := x - 1
进入:
READ X (R2) DEC WRITE (W2)
它说INC WRITE 和READ inc 都表现得好像是原子的,我真的不明白为什么做出这样的假设是安全的?
那么,显然这个程序命令返回值 -1 : R1 -> R2 -> W1 -> W2 我不明白为什么?
据我了解,我们似乎正在读取 x 的值,然后再次读取它,然后将其递增 1,然后将其递减 1,这不应该等于 0 吗?
感谢您的帮助。
【问题讨论】:
标签: concurrency parallel-processing