Для меня это выглядит довольно странно и похоже на ошибку.
Этот код в режиме выпуска в Visual Studio 2019 обеспечивает бесконечный цикл.
class Program
{
private static int _a;
static void Main(string[] args)
{
_a = 1;
while (_a == 1)
{
Console.WriteLine(_a);
_a = 0;
}
}
}
volatile
или Thread.MemoryBarrier();
(после _a = 0;
) решает проблему. Не думаю, что у меня была такая проблема с VS2015. Это правильное поведение? Какая именно часть оптимизирована?