我想知道复合赋值^=在C#中是否是原子的。我真正需要做的是使用单个原子操作旋转一个Int32变量(如果值为0,则将其设置为1,如果为1,则将其设置为0)。
发布于 2011-06-09 19:58:37
如上所述,x^=1不是原子的。您是否可以使用Interlocked.Increment (它是原子的),然后在读取时考虑值% 2?
发布于 2011-06-09 19:27:49
保证是原子的操作被收集在Interlocked类中。请参阅http://msdn.microsoft.com/en-us/library/system.threading.interlocked.aspx
发布于 2011-06-09 19:29:50
复合赋值不是原子的。例如,x += 1是一个语法糖,用于从内存中读取x,添加1,并将值写回内存。
如果你想很好地解释什么是原子,什么不是原子,请阅读Eric Lippert关于这个主题的博客文章:Atomicity, volatitly and immutability are different
https://stackoverflow.com/questions/6291994
复制相似问题