호빵의 IT 개발소

[게임 서버] 컴파일러 최적화 오류 관련 본문

C#, 유니티/게임 서버

[게임 서버] 컴파일러 최적화 오류 관련

호빵Stack 2022. 2. 11. 19:41

예제 작성

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); //1초동안 쓰레드가 대기함

            _stop = true; //stop 신호을 준다.

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

            t.Wait(); //Task가 끝나는 걸 확인.

            Console.WriteLine("종료 성공");
        }
    }
}

 

Debug 출력


최적화 하는 방법

-상단에 Debug를 Release로 변경 후 실행

출력

-오류 발생

이유

-최적화를 하게 되면 ThreadMain() 안에 있는 While문을 컴퓨터가 임의로 바꾸게 됩니다.

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

namespace ServerCore
{
    class Program
    {
        static bool _stop = false;

        static void ThreadMain()
        {
            Console.WriteLine("쓰레드 시작!");

            if (_stop == false) //오류 원인
            {
                while (true)
                {
                
                }
            }

            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(); 

            Console.WriteLine("종료 성공");
        }
    }
}

 

해결 방법

- _stop을 휘발성 데이터로 만들어서 최적화를 하지 못하도록 만듭니다.

   ex) volatile static bool _stop = false;

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------

참고 : [인프런] Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

'C#, 유니티 > 게임 서버' 카테고리의 다른 글

[게임 서버] 캐시 이론  (0) 2022.02.11
[게임 서버] thread(쓰레드)  (0) 2022.02.09
[게임 서버] 서버란?  (0) 2022.02.09
Comments