当两个线程试图在同一时间修改同一属性时会发生什么?例如,如果我有int value = 0
并且我有线程A value += 5
和线程B value -= 3
,会发生什么?无论线程访问变量的顺序如何,我都应得到相同的结果,但我想他们可以在同一时间访问该变量。
答案 0 :(得分:1)
不,你不会得到相同的结果。即使操作很简单,它也不是处理器的原子操作。简单来说,处理器需要从存储器中获取值到其寄存器,执行算术指令并将值存储回存储器。因此,它们可能得到相同的0值,并且存储的值取决于最后一个值。
您可能获得的结果因不同的运行而异,可能是5,-3,2
答案 1 :(得分:1)
计算机中没有完全相同的时间。对于一个螺纹,然后是另一个螺纹,则为1纳秒或更短。它被称为时间切片。对于我们来说+=
和-=
可能是单一操作,但对于处理器来说,这些是多条指令。
上述没有同步的代码会导致竞争状态,并且不会始终保证相同的值。