Questions tagged «atomicity»

4
引用分配是原子的,那么为什么需要Interlocked.Exchange(ref Object,Object)?
在我的多线程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”我应该怎么看?

4
在UNIX中,文件追加是原子的吗?
通常,当我们从多个进程附加到UNIX中的文件时,我们可以理所当然地做什么呢?是否有可能丢失数据(一个进程覆盖另一个进程的更改)?数据有可能被破坏吗?(例如,每个进程向日志文件中的每个追加追加一行,是否有可能两行被整顿?)如果从上述意义上说,追加不是原子的,那么确保互斥的最佳方法是什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.