11

这是否保证是线程安全的/不会产生意外结果?

Interlocked.Increment(ref _arr[i]);

我的直觉告诉我这不是,即读取 _arr[i] 中的值不能保证在实际递增时是“原子的”。

如果我认为这是错误的正确,我该如何解决?谢谢。

4

2 回答 2

16

假设没有任何变化,i或者_arr,那应该没问题。

数组被视为变量的集合;无论该元素或同一数组中的其他元素发生了什么,联锁增量都应该可以正常工作。

于 2012-10-08T14:29:11.370 回答
1

如果某些东西异步变化的_arri那么我同意你的看法,不,查找_arr[i]本身不一定是原子的。

然而,正如 Jon 所说,一旦你确定了 (some) 的一个元素_arr它将自动递增,独立于数组的其他元素中发生的其他操作,或者对 or 的进一步_arr更改i

如果_arri正在异步更改,对它们的所有引用(读取和写入)需要lock位于公共对象的 a 内。(然后您可以Interlocked.Increment++.

于 2013-05-27T05:45:10.090 回答