Tag: 波动

引用赋值是primefaces,所以为什么Interlocked.Exchange(ref Object,Object)需要?

在我的multithreadingasmx Web服务中,我有一个我自己types的SystemData的类字段_allData,它由less数List<T>和Dictionary<T>标记为volatile 。 系统数据( _allData )刷新一次,我通过创build另一个名为newData对象,并用新的数据填充它的数据结构。 完成后,我只是分配 private static volatile SystemData _allData public static bool LoadAllSystemData() { SystemData newData = new SystemData(); /* fill newData with up-to-date data*/ … _allData = newData. } 这应该工作,因为赋值是primefaces的,并且对旧数据的引用的线程继续使用它,其余的在赋值之后有新的系统数据。 然而,我的同事说,而不是使用volatile关键字和简单的assigment,我应该使用InterLocked.Exchange因为他说,在某些平台上,不能保证参考分配是primefaces。 而且:当我声明the _allData字段为volatile Interlocked.Exchange<SystemData>(ref _allData, newData); 产生警告“对易失性字段的引用不会被视为易失性”我应该怎么看待这个问题?