разница между Interlocked.Exchange и Volatile.Write?

В чем разница между 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, Поскольку двойное обновление не гарантируется как атомарноеhttp://msdn.microsoft.com/en-us/library/aa691278%28VS.71%29.aspx

В ответе на этот вопрос я хочу увидеть подробное сравнение классов Volatile и Interlocked. Зачем нам 2 класса? Какой и когда использовать?

Ответы на вопрос(1)

Ваш ответ на вопрос