개인공부) 서버 실습(4) - 최적화 예외처리

Justin·2022년 5월 26일
0

서버공부

목록 보기
3/45
post-thumbnail
post-custom-banner

최적화 시 예외처리

우선 기존에 배웠던 코드들을 활용해 무한 루프를 돌고 있는 MainThread를 만들어 주고 bool 전역 변수를 통해 빠져나갈 구멍을 만들어준다.

그뒤 Task를 활용해 MainThread()를 실행시켜준다. 그후 Thread.Sleep(*1ms)으로 잠시 쉬어주고 _stop 변수를 True 변경해 탈출 시켜준다.

예상했던 대로 t.Start()를 통해 메인쓰레드를 먼저 동작 시키고, 2초 후 나머지 항목들이 진행되는 구조이다.

Release 했을 때 문제점

위와 똑같은 구조의 코드를 가지고 Debug 모드 -> Release로 변경했을 경우에는 문제가 발생한다.

Release 모드 사용 시 자체적으로 최적화를 진행해주게 되는데, 그 과정 중에서 while 영역을 변경하여 무한 루프에 빠지게 되어 그 다음 테스크로 넘어가지 못하는 현상이 발견된다.

이때는 volatile라는 키워드를 사용하면 최적화 하지 말아달라고 요청할 수 있다. 조금 더 정확하게는 최신의 값을 가져와라(?)라는 조금 더 복잡한 개념이 들어가기에 이걸 굳이 사용할 필요는 없다 한다.

하지만 여기서만 사용해보면 Release 상태로 가더라도 _stop을 최적화 하지 않아 다시 정상 구동 되는 걸 확인할 수 있다.

중요 포인트

Debug 때는 잘 구동되어도, Release 되면 오류가 발생할 수 있다는 점을 알아두자

profile
인디 게임을 만들며 공부하고 있습니다.
post-custom-banner

0개의 댓글