컴파일러 최적화

Icarus_w·2022년 12월 20일
0

📌주제 : 릴리즈 모드 시 발생하는 코드 최적화에 의한 오류 발생

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;
profile
하루에 하나

0개의 댓글

관련 채용 정보