la asignación de referencia es atómica, entonces ¿por qué se necesita Interlocked.Exchange (ref Object, Object)?

En mi servicio web multiproceso asmx tuve un campo de clase _todosData de mi propio tipo SystemData que consta de pocosList<T> yDictionary<T> marcado comovolatile. Los datos del sistema (_allData) se actualiza de vez en cuando y lo hago creando otro objeto llamadonewData y llenar sus estructuras de datos con nuevos datos. Cuando termine, solo asigno

private static volatile SystemData _allData

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

Esto debería funcionar ya que la asignación es atómica y los hilos que tienen la referencia a datos antiguos siguen usándola y el resto tiene los nuevos datos del sistema justo después de la asignación. Sin embargo, mi colega dijo que en lugar de usarvolatile palabra clave y asignación simple que debo usarInterLocked.Exchange porque dijo que en algunas plataformas no se garantiza que la asignación de referencia sea atómica. Además: cuando declarothe _allData campo comovolatile el

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

produce advertencia "una referencia a un campo volátil no se tratará como volátil" ¿Qué debo pensar al respecto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta