Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 인프런
- 해쉬맵
- 자료구조
- map
- thread
- 반복문
- vector
- 큐
- rookiss
- std::map
- 멀티쓰레드
- 차이점
- 알고리즘
- 객체지향
- 스택
- Queue
- 공부
- std::unordered_map
- 힙영역
- 벡터
- 배열
- static_cast
- 트리
- 프래그멘테이션
- MonoBehaviour
- 리스트
- 기술면접
- c#
- list
- 스택영역
Archives
- Today
- Total
호빵의 IT 개발소
[게임 서버] 컴파일러 최적화 오류 관련 본문
예제 작성
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