Я обычно пишу код, который выглядит следующим образом:
public class MyClass
{
static bool m_stop = false;
public static void Main()
{
var th = new Thread(DoStuff);
th.Start();
Console.ReadLine();
m_stop = true;
th.Join();
}
private static void DoStuff()
{
while( !m_stop )
{
// do things here
}
}
}
... и я всегда синхронизирую доступ к переменной m_stop, просто по привычке. Мне интересно, действительно ли это необходимо делать (при условии, что запуск дополнительного цикла или двух в DoStuff() ничему не повредит). Что самое худшее может произойти, если код будет выполняться именно так? Я думал об использовании ключевого слова volatile для m_stop, но я не уверен, что даже это необходимо. Кто-нибудь знает наверняка?