0

当两个线程试图同时修改同一个属性时会发生什么?例如,如果我有一个int value = 0并且我有线程 Avalue += 5和线程 B value -= 3,会发生什么?无论线程以何种顺序访问变量,我都应该得到相同的结果,但我想他们可以同时访问该变量。

4

2 回答 2

1

不,你不会得到相同的结果。即使操作很简单,它也不是处理器的原子操作。简单地说,处理器需要从内存中取出值到它的寄存器,执行算术指令并将值存储回内存。因此,它们可能会得到相同的值 0,而存储的值取决于最后一个值。

您可能得到的结果会因不同的运行而有所不同,可能是 5、-3、2

于 2013-10-22T03:05:15.890 回答
1

计算机中没有完全相同的时间。一个线程的时间为 1 纳秒或更短,然后另一个线程的时间为 1 纳秒或更短。它被称为时间切片。对我们来说+=-=可能是单个操作,但对于处理器来说,这些是多个指令。

上面没有同步的代码会导致竞争状态,并且不会一直保证相同的值。

于 2013-10-22T03:05:47.740 回答