• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

쓰레드 While 문 질문입니다

21.03.10 16:08 작성 조회수 175

0

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

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

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

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

답변 2

·

답변을 작성해보세요.

0

astrape님의 프로필

astrape

질문자

2021.03.10

답변 감사합니다!!

0

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

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