różnica między Interlocked.Exchange a Volatile.Write?

Jaka jest różnica między Interlocked.Exchange a Volatile.Write?

Obie metody aktualizują wartość jakiejś zmiennej. Czy ktoś może podsumować, kiedy używać każdego z nich?

http://msdn.microsoft.com/ru-ru/library/bb337971 ihttp://msdn.microsoft.com/en-us/library/gg712713.aspx

W szczególności muszę zaktualizować podwójny element mojej tablicy i chcę, aby inny wątek zobaczył najświeższą wartość. Co jest preferowane?Interlocked.Exchange(ref arr[3], myValue) lubVolatile.Write(ref arr[3], info); gdziearr jest zadeklarowany jakodouble?

================================================== ========================== Prawdziwy przykład, deklaruję taką podwójną tablicę:

private double[] _cachedProduct;

W jednym wątku aktualizuję to tak:

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

W innym wątku przeczytałem następującą tablicę:

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

Dla mnie to po prostu działa dobrze. Jednak aby upewnić się, że „zawsze będzie działać”, niezależnie od tego, co się wydarzy, powinienem dodać takżeVolatile.Write lubInterlocked.Exchange. Ponieważ podwójna aktualizacja nie jest gwarantowana jako atomowahttp://msdn.microsoft.com/en-us/library/aa691278%28VS.71%29.aspx

W odpowiedzi na to pytanie chcę zobaczyć szczegółowe porównanie klas Volatile i Interlocked. Dlaczego potrzebujemy 2 klas? Który i kiedy używać?

questionAnswers(1)

yourAnswerToTheQuestion