Два потока (основной поток и другой поток с именем T) имеют доступ к одному и тому же логическому полю. T ничего не делает, кроме while (_bool) { }
, а Main присваивает false _bool
через 2 секунды.
При отладке T выходит из цикла.
При выпуске T никогда не выходит из цикла.
Почему?
РЕДАКТИРОВАТЬ:
Более того, почему volatile
на _bool
это решает?
using System;
using System.Threading;
namespace ConsoleApplication1
{
internal class Program
{
private bool _bool = true;
private static void Main()
{
var program = new Program();
var t = new Thread(SomeThread);
t.Start(program);
Thread.Sleep(2000);
program._bool = false;
Console.WriteLine(program._bool);
}
private static void SomeThread(object obj)
{
var p = obj as Program;
Console.WriteLine("Entered loop");
while (p._bool)
{
}
Console.WriteLine("Exited Loop");
}
}
}
_bool
. - person Daniel A. White   schedule 11.01.2016