A atribuição de referência é atômica, por que o Interlocked.Exchange (ref Object, Object) é necessário?

No meu serviço da web asmx multithread, eu tinha um campo de classe _allData do meu próprio tipo SystemData que consiste em poucosList<T> eDictionary<T> marcado comovolatile. Os dados do sistema (_allData) é atualizada de vez em quando e eu faço isso criando outro objeto chamadonewData e preencha suas estruturas de dados com novos dados. Quando terminar, eu apenas atribuo

private static volatile SystemData _allData

public static bool LoadAllSystemData()
{
    SystemData newData = new SystemData();
    /* fill newData with up-to-date data*/
     ...
    _allData = newData.
} 

Isso deve funcionar, pois a atribuição é atômica e os threads que têm referência a dados antigos continuam a usá-lo e o restante possui os novos dados do sistema logo após a atribuição. No entanto, meu colega disse que, em vez de usarvolatile palavra-chave e atribuição simples que devo usarInterLocked.Exchange porque ele disse que em algumas plataformas não é garantido que a atribuição de referência seja atômica. Além disso: quando eu declarothe _allData campo comovolatile a

Interlocked.Exchange<SystemData>(ref _allData, newData); 

produz aviso "uma referência a um campo volátil não será tratada como volátil" O que devo pensar sobre isso?

questionAnswers(4)

yourAnswerToTheQuestion