Я пробовал несколько проблемных случаев, когда volatile полезно с .NET Framework.Однако в .NET Core я не нашел ни одного случая, когда волатильность действительно помогает.Является ли модель памяти с .NET Core более сильной, чем .NET Framework, так что нам больше не требуется энергозависимость?
В качестве примера следующий код на неопределенный срок блокируется с помощью .net Framework, если вы создаете его в режиме выпуска, но онне с .net core.Причина в том, что в случае .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
}
}