复合赋值^ =原子在C#中?

时间:2011-06-09 11:22:33

标签: c# atomic

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

如果你想要一个很好的解释什么是原子和什么不是原子阅读Eric Lippert关于这个主题的博客文章:Atomicity, volatitly and immutability are different