是volatile关键字用在Intel的CPU对.NET核心有用吗?

问题描述 投票:1回答:1

我曾尝试一些有问题的情况下,与波动的.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
        }
    }
c# multithreading .net-core volatile
1个回答
1
投票

this articlevolatile在C#中告诉编译器/ JIT发出阻止指令重新排序的指令。虽然.NET的Intel平台上的内存模型通常是足够强大的是订货会很少发生,你永远不知道在其他平台(例如ARM)。

换句话说,很少有需要使用volatile,除非你是害怕重新排序可以打破你的代码。同时,当涉及到多线程,它始终是最好是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.