C# 서버 프로그래밍 - 멀티쓰레드 컴파일러 최적화

Task t 객체
t.Wait(); // Thread 종료까지 기다리겠다는 의미 Thread 객체였다면 t.join()하는 것과 같음.

디버깅 모드와 릴리즈 모드

평소에는 디버깅 모드로 실행해왔지만,
실제로 라이브로 배포할 때는 릴리즈모드로 실행한다.

이 때 버그가 터질 수 있다.

using System;
using System.Threading;
using System.Threading.Tasks;

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();
            Thread.Sleep(1000);

            _stop = true;

            Console.WriteLine("Stop 호출");
            Console.WriteLine("종료 대기중");

            t.Wait(); // Thread 종료까지 기다리겠다는 의미 Thread 객체였다면 t.join()하는 것과 같음.
            Console.WriteLine("종료 성공");
        }
    }
}


debug 모드 결과

쓰레드 시작
Stop 호출
쓰레드 종료!
종료 대기중
종료 성공

release 모드 결과

쓰레드 시작
Stop 호출
종료 대기중

종료 되지 않고 있다.

댓글남기기