我曾尝试一些有问题的情况下,与波动的.NET Framework帮助。但是在.NET的核心我还没有发现,挥发性实际上是帮助一个案例。比.NET框架具有较强核心.NET的内存模型,使我们不需要任何挥发性更多?
作为一个例子,下面的代码块无限期使用.NET框架,如果你与释放模式构建它,但它不与.NET的核心。其原因是,在.NET情况下的值被存储在寄存器中并缓存:
class Program
{
static bool complete = false;
static void Main()
{
var t = new Thread(() =>
{
bool toggle = false;
while (!complete) toggle = !toggle;
});
t.Start();
Thread.Sleep(1000);
complete = true;
t.Join(); // Blocks indefinitely
}
}
据this article,volatile
在C#中告诉编译器/ JIT发出阻止指令重新排序的指令。虽然.NET的Intel平台上的内存模型通常是足够强大的是订货会很少发生,你永远不知道在其他平台(例如ARM)。
换句话说,很少有需要使用volatile
,除非你是害怕重新排序可以打破你的代码。同时,当涉及到多线程,它始终是最好是安全的。