是复合赋值^=C#中的原子赋值

本文关键字:赋值 复合 | 更新日期: 2023-09-27 17:58:49

我想知道复合赋值^=在C#中是否是原子赋值。我真正需要做的是用一个原子操作旋转Int32变量(如果值为0,则将其设置为1,如果值为1,则将它设置为0)。

是复合赋值^=C#中的原子赋值

如上所述,x^=1不是原子。你能使用Interlocked.Increment(它是原子的),然后在读取时考虑值%2吗?

保证为原子的操作收集在Interlocked类中。看见http://msdn.microsoft.com/en-us/library/system.threading.interlocked.aspx

复合赋值不是原子赋值。例如,x += 1是从内存中读取x、加1并将值写回内存的语法糖。

如果你想很好地解释什么是原子,什么不是原子,请阅读Eric Lippert的博客文章:原子性、volatily和不变性是不同的