在我的多线程asmx Web服务中,我有一个自己类型为SystemData的类字段_allData,由几个组成List<T>
并Dictionary<T>
标记为volatile
。系统数据(_allData
)会不时刷新,我通过创建另一个称为的对象newData
并用新数据填充其数据结构来做到这一点。完成后,我只分配
private static volatile SystemData _allData
public static bool LoadAllSystemData()
{
SystemData newData = new SystemData();
/* fill newData with up-to-date data*/
...
_allData = newData.
}
这应该起作用,因为分配是原子的,并且引用了旧数据的线程继续使用它,其余线程在分配后立即拥有了新的系统数据。但是我的同事说,volatile
我不应该使用关键字和简单配置,InterLocked.Exchange
因为他说在某些平台上不能保证引用分配是原子的。另外:当我宣布the _allData
字段volatile
的
Interlocked.Exchange<SystemData>(ref _allData, newData);
产生警告“对volatile字段的引用将不会被视为volatile”我应该怎么看?