using System;
namespace ServerCore
{
class Program
{
static bool _stop = false;
static void ThreadMain()
{
Console.WriteLine("쓰레드 시작!");
while (_stop == false)
{
// 누군가가 stop 신호를 해주기를 기다린다.
}
Console.WriteLine("쓰레드 종료!");
}
static void Main(string[] args)
{
Task t = new Task(ThreadMain);
t.Start();
// 1초간 잠시 멈춤
Thread.Sleep(1000);
_stop = true;
Console.WriteLine("Stop 호출!");
Console.WriteLine("종료 대기중");
t.Wait();
Console.WriteLine("종료 성공");
}
}
}
while(_stop) 부분에 _stop을 바꿔주는 부분이 딱히 없기 때문에
if(_stop == false)
{
while(true)
{
}
}
이렇게 Release모드에서 최적화를 해버린다.
따라서 최적화를 안하도록 강제한다.
volatile 키워드를 통해서 컴파일러에게 최적화를 하지 말라고 알려줄 수 있다.
volatile static bool _stop = false;