2012-10-08 68 views
9

这是保证是线程安全的/不会产生意想不到的结果吗?Interlocked.Increment一个整数数组

Interlocked.Increment(ref _arr[i]); 

我的直觉告诉我这不是,即读取_arr [I]的值没有被保证是“原子”与实际递增。

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

+0

谁或什么的'_arr [I]'读书的价值?这个代码不读它,它增加其原子,因为这是'Interlocked.Increment '确实。 –

回答

13

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

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

1

如果事情异步改变_arri然后,我同意你的观点,不,查找_arr[i]是不是原子本身。

然而,如乔恩说,一旦你已确定的(一些)_arr将被原子地递增,独立于其它动作在阵列(一个或多个)的其他元件发生的,或进一步改变为元素_arri

如果_arri正在异步改变,所有对它们的引用(读取和写入)需要一个lock内一个共同的对象。 (然后你就可以将Interlocked.Increment减少到一个简单的++