référence affectation est atomique alors pourquoi est Interloqué.De change(réf Object, Object) nécessaires?

Dans mon multithread service web asmx j'avais un champ de classe _allData de mon propre type SystemData qui se compose de quelques List<T> et Dictionary<T> marqué comme volatile. Le système de données (_allData) est actualisée une fois dans un certain temps et je le fais par la création d'un autre objet appelé newData et de le remplir de structures de données avec de nouvelles données. Quand c'est fait, je viens de céder

private static volatile SystemData _allData

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

Cela devrait fonctionner depuis la cession est atomique et les fils qui ont la référence à des données anciennes continuer à l'utiliser et le reste du nouveau système de données juste après la cession. Cependant, mon collegue a dit qu'au lieu d'utiliser volatile mot-clé et simple affectation que je devrais utiliser InterLocked.Exchange car il a dit que, sur certaines plateformes, il n'est pas garanti que la référence affectation est atomique. Par ailleurs: quand je déclare the _allData champ volatile la

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

produit l'avertissement "une référence à un champ volatile ne seront pas traités comme volatile" Que dois-je penser de cela?

InformationsquelleAutor char m | 2010-02-03