인프런 커뮤니티 질문&답변

astrape님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

컴파일러 최적화

쓰레드 While 문 질문입니다

해결된 질문

작성

·

293

0

ThreadMain함수 안에서 release 모드에서는 코드가 변형이 되어

while(_stop == false) 가 if (stop == false) while(true) 형태로 변형이 된다고 하셨는데

그러면 쓰레드를 사용하는 경우에 while(_stop == false) 같은 형식을 쓰는 것을 자제해야 하는건가요?

지금이야 몇줄 안되서 멈추는 원인을 찾기 쉬웠겠지만 나중에 코드가 길어질 경우 그런 변형으로 인한 오류 부분이 나타나면 찾기 어려울것 같은데 어떻게 해야 하나요?

답변 2

0

astrape님의 프로필 이미지
astrape
질문자

답변 감사합니다!!

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

멀티쓰레드 환경이라고 모든 변수가 항상 문제가 되는게 아니고
쓰레드끼리 공유해서 사용하는 데이터들이 문제가 됩니다.
일반 함수의 로컬 변수는 멀티쓰레드 환경이라 하더라도
각자의 스택 메모리가 있기에 별다른 영향을 받지 않습니다.

어차피 멀티쓰레드에 온 이상 [공유 데이터]는 항상 주의 깊게 생각해야 하기 때문에,
while (_stop == false)를 자제해야 할 것 까지는 없을 것 같고
그냥 특징 데이터가 공유 데이터인지를 생각하면서 프로그래밍을 해야합니다.
마지막으로 변형으로 인한 오류 부분이 나타나면 찾기 어려울 것 같다 하셨는데, 맞습니다!
싱글쓰레드에선 없던 버그가 멀티쓰레드에서만 발생하면
정말 골치가 아프고 찾기 힘든 상황이 종종 발생합니다.
그래서 멀티쓰레드를 프로그래밍의 흑마술이라고도 하고
MMO 서버 같이 꼭!! 사용해야 할 상황이 아니면 정말 기피하는 사람들도 많습니다.

astrape님의 프로필 이미지

작성한 질문수

질문하기