这是保证是线程安全的/不会产生意想不到的结果吗?Interlocked.Increment一个整数数组
Interlocked.Increment(ref _arr[i]);
我的直觉告诉我这不是,即读取_arr [I]的值没有被保证是“原子”与实际递增。
如果我认为这是错的,我该如何解决这个问题?谢谢。
这是保证是线程安全的/不会产生意想不到的结果吗?Interlocked.Increment一个整数数组
Interlocked.Increment(ref _arr[i]);
我的直觉告诉我这不是,即读取_arr [I]的值没有被保证是“原子”与实际递增。
如果我认为这是错的,我该如何解决这个问题?谢谢。
假设没有任何变化i
或_arr
,应该没问题。
一个数组被视为变量的集合;无论该元素或同一阵列中的其他元素发生了什么,互锁增量都应该正常工作。
如果事情为异步改变_arr
或i
然后,我同意你的观点,不,查找_arr[i]
是不是原子本身。
然而,如乔恩说,一旦你已确定的(一些)_arr
,它将被原子地递增,独立于其它动作在阵列(一个或多个)的其他元件发生的,或进一步改变为元素_arr
或i
。
如果_arr
或i
正在异步改变,所有对它们的引用(都读取和写入)需要一个lock
内一个共同的对象。 (然后你就可以将Interlocked.Increment
减少到一个简单的++
。
谁或什么的'_arr [I]'读书的价值?这个代码不读它,它增加其原子,因为这是'Interlocked.Increment '确实。 –