是什么Interlocked.Exchange和Volatile.Write之间的区别?
一些变量的两种方法更新值。 有人可以总结时要使用他们每个人的?
http://msdn.microsoft.com/ru-ru/library/bb337971和http://msdn.microsoft.com/en-us/library/gg712713.aspx
特别是我需要更新我的阵列的双项目,我想另一个线程看到最新鲜的价值。 什么是最好? Interlocked.Exchange(ref arr[3], myValue)
或Volatile.Write(ref arr[3], info);
其中arr
被声明为double
?
================================================== ==========================真实的例子,我宣布类似的双数组:
private double[] _cachedProduct;
在一个线程更新它这样的:
_cachedProduct[instrumentId] = calcValue;
...
are.Set();
在另一个线程我读这阵这样的:
while(true) {
are.WaitOne();
...
result += _cachedProduct[instrumentId];
...
}
对我来说,它只是正常工作原样。 然而,为了确保“它会永远工作”不管是什么,似乎我应该添加任何Volatile.Write
或Interlocked.Exchange
。 由于双更新不guaranted是原子http://msdn.microsoft.com/en-us/library/aa691278%28VS.71%29.aspx
在回答这个问题,我想看到的挥发性和互锁类的详细比较。 我们为什么需要2班? 哪一个,以及何时使用?