2011-06-09 49 views
2

我不知道複合賦值^ =是否是C#中的原子。 我真正需要做的是旋轉(如果值爲0,則將其設置爲1,如果它爲1,則將其設置爲0)使用單個原子操作的Int32變量。C#中的複合賦值^ =原子嗎?

+2

對於0(否/錯誤)或1(是/真),爲什麼要使用Int32?這正是布爾值。 – RobinJ 2011-06-09 11:24:55

+0

它是數組中的一個索引。 – 2011-06-09 11:45:33

回答

4

如上回答,X^= 1是不是原子。你可以使用Interlocked.Increment(這是原子的),然後,在閱讀時,考慮值%2?

+0

金星給你,羅伯!它幫助到我。 – 2011-06-09 12:03:17

+3

要小心。 「%2」可以給你1,0或-1作爲答案。 「%2」不是讀取最低位的同義詞。如果你想讀取底部位,請閱讀底部位。 – 2011-06-09 15:01:13

+0

沒有考慮到這一點。據推測,直到你溢出這不是一個問題。 – Rob 2011-06-10 10:31:40

2

化合物分配不是原子的。例如x += 1是一個用於從內存中讀取x的語法糖,添加1並將值寫回內存。

如果你想要的是什麼,什麼是不原子讀埃裏克利珀對這個問題的博客文章一個很好的解釋:Atomicity, volatitly and immutability are different