Interlocked.Increment一个整数数组

时间:2012-10-08 14:27:32

标签: c# multithreading .net-4.0

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

Interlocked.Increment(ref _arr[i]);

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

如果我认为这是错误的,我该如何解决这个问题?感谢。

2 个答案:

答案 0 :(得分:14)

假设没有任何变化i_arr,那应该没问题。

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

答案 1 :(得分:1)

如果某些 异步更改_arri,那么我同意你的意见,不,查找_arr[i]本身不一定是原子的。

然而,正如Jon所说,一旦你确定了(某些)_arr的元素,将以原子方式递增,独立于阵列其他元素中发生的其他动作( s),或对_arri的进一步更改。

如果_arri被异步更改,所有对它们的引用( 读取和写入)都需要在{ {1}}在一个共同的对象上。 (然后,您可以将lock缩减为简单的Interlocked.Increment