这是否保证是线程安全的/不会产生意外结果?
Interlocked.Increment(ref _arr[i]);
我的直觉告诉我这不是,即读取 _arr[i] 中的值不能保证在实际递增时是“原子的”。
如果我认为这是错误的正确,我该如何解决?谢谢。
这是否保证是线程安全的/不会产生意外结果?
Interlocked.Increment(ref _arr[i]);
我的直觉告诉我这不是,即读取 _arr[i] 中的值不能保证在实际递增时是“原子的”。
如果我认为这是错误的正确,我该如何解决?谢谢。
假设没有任何变化,i
或者_arr
,那应该没问题。
数组被视为变量的集合;无论该元素或同一数组中的其他元素发生了什么,联锁增量都应该可以正常工作。
如果某些东西是异步变化的_arr
,i
那么我同意你的看法,不,查找_arr[i]
本身不一定是原子的。
然而,正如 Jon 所说,一旦你确定了 (some) 的一个元素_arr
,它将自动递增,独立于数组的其他元素中发生的其他操作,或者对 or 的进一步_arr
更改i
。
如果_arr
或i
正在异步更改,对它们的所有引用(读取和写入)都需要lock
位于公共对象的 a 内。(然后您可以Interlocked.Increment
将++
.