【发布时间】:2016-01-31 17:48:34
【问题描述】:
就我对这些技巧的理解而言,能够在 DNX 上做一个完整的全栅栏内存屏障比在标准 .Net 框架中更重要: - DNX 可能在内存模型比 x86/x64 弱的 IA64 上运行。 - Microsoft CLR 使用比 ECMA 规范定义的更强大的内存模型。
引用Why do I need a memory barrier?的回答
您将很难重现此错误。事实上,我什至会说您永远无法使用 .NET Framework 重现它。原因是因为微软的实现使用强大的内存模型进行写入。这意味着写入被视为易失性。易失性写入具有锁定释放语义,这意味着必须在当前写入之前提交所有先前的写入。
但是,ECMA 规范的内存模型较弱。因此,从理论上讲,Mono 甚至 .NET Framework 的未来版本可能会开始出现错误行为。
但是,MemoryBarrier、VolatileRead 和 VolatileWrite 均不适用于 Thread 课程。
我的问题是:
- 这是一个确定的选择吗?
- 什么是最好的替代方案(假设我当前的代码库使用
MemoryBarrier)来实现无锁的东西?
【问题讨论】:
-
不确定是否仍然可以购买安腾系统。但我认为 ARM 的内存模型很弱,现在 .NET Micro 至少支持 ARM。
标签: c# .net multithreading dnx memory-barriers