这是否保证线程安全/不会产生意想不到的结果?
Interlocked.Increment(ref _arr[i]);我的直觉告诉我这不是,也就是说,读取_arri中的值并不能保证与实际的增量是“原子的”。
如果我认为这是错误的,我如何解决这个问题?谢谢。
发布于 2012-10-08 22:29:11
假设i或_arr没有任何变化,这应该没问题。
数组被视为变量的集合;无论该元素或同一数组中的其他元素发生了什么情况,互锁增量都应该工作得很好。
发布于 2013-05-27 13:45:10
如果某个东西是异步更改的_arr或i,那么我同意您的观点,不,查找_arr[i]本身不一定是原子的。
然而,正如Jon所说,一旦你确定了(一些) _arr的一个元素,它将自动递增,独立于在数组的其他元素中发生的其他操作,或者对_arr或i的进一步更改。
如果_arr或i是异步更改的,则对它们的所有引用(包括读和写)都需要在一个公共对象的lock中。(然后,您可以将Interlocked.Increment简化为一个简单的++。
https://stackoverflow.com/questions/12783781
复制相似问题