并发加法和减法

时间:2013-10-22 02:57:21

标签: multithreading concurrency

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

2 个答案:

答案 0 :(得分:1)

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

您可能获得的结果因不同的运行而异,可能是5,-3,2

答案 1 :(得分:1)

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

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