diferença entre Interlocked.Exchange e Volatile.Write?

Qual é a diferença entre Interlocked.Exchange e Volatile.Write?

Ambos os métodos atualizam o valor de alguma variável. Alguém pode resumir quando usar cada um deles?

http://msdn.microsoft.com/ru-ru/library/bb337971 ehttp://msdn.microsoft.com/pt-br/library/gg712713.aspx

Em particular, preciso atualizar o item duplo do meu array e quero outro thread para ver o valor mais recente. O que é preferido?Interlocked.Exchange(ref arr[3], myValue) ouVolatile.Write(ref arr[3], info); Ondearr é declarado comodouble?

================================================== ========================== Exemplo real, eu declaro double array assim:

private double[] _cachedProduct;

Em um thread eu atualizo assim:

        _cachedProduct[instrumentId] = calcValue;
        ...
        are.Set();

Em outro segmento eu li essa matriz assim:

        while(true) {
            are.WaitOne();
            ...
                result += _cachedProduct[instrumentId];
            ...
        }

Para mim, funciona bem como está. No entanto, para ter certeza de que "sempre funcionará", não importa o que pareça, devo adicionarVolatile.Write ouInterlocked.Exchange. Porque a atualização dupla não é garantida para ser atômicahttp://msdn.microsoft.com/pt-br/library/aa691278%28VS.71%29.aspx

Na resposta a essa pergunta, quero ver uma comparação detalhada das classes Volátil e Intertravada. Por que precisamos de duas classes? Qual e quando usar?

questionAnswers(1)

yourAnswerToTheQuestion