inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

CPU 파이프라인

volatile 관련

374

언리얼컨설팅

작성한 질문수 31

0

강의 내용을 복습하다가 막힌 부분을 질문 드립니다.

해당 내용에서 volatile bool ready를 선언하여 진행하였는데,

이것저것 테스트를 해보려고 시도하다가,

Release모드로 변경했을때, volatile이 있을때는 여전히 if문에서 바로 빠져나오는 것을 확인할 수 있었습니다.

그런데 volatile을 빼주고 Release 모드로 진행했을때는 이상하게 프로그램이 끝나지 않는 문제가 발생했습니다.

volatile을 빼줬고 Release로 했다는건, 최적화를 지멋대로 컴파일러가 진행했을것 같은데, 오히려 이것이 r1과 r2가 영원히 0이 되지 않는 문제로 이어진다는게 이해가 안갔습니다.

코드 재배치와 가시성 문제를 자체적으로 해결했다는것으로 예상되는데, 이것을 컴파일러 최적화(Release모드)가 한번에 해결했다고 생각하면 되는건가요?

volatile이 있는 상태에서 Release모드로 돌렸을때는, 최적화를 막고 있는 그대로 실행하기 바라는 것이고, 그로 인해 강의 내용에 나오는 원인이었던 코드 재배치와 가시성 문제로 반복문에서 빠져나오게 되는것이라 생각했는데 제가 제대로 이해한게 맞을까요?

network windows-server MMORPG

답변 1

0

Rookiss

C++의 volatile은 C#과 volatile과 다르게 가시성과 무관하고 
단순히 컴파일러 최적화를 막는 역할만 합니다.
컴파일러 최적화에 의해서 의도한 코드와 다른 코드가 만들어질 수 있는데
이를테면 변수에 a = 1; a = 2; a =3; 
을 각각 넣으면 마지막 상태인 a = 3만 넣는다거나,
하는 다양한 방법의 최적화를 알아서 해줍니다.

writeLock을 잡을때 꼭 empty 상태여야하는 이유?

0

63

2

Memory Pool에서 오버플로우 질문입니다.

0

94

2

포토폴리오 및 진로 관련하여 고민입니다.

0

172

1

포토폴리오 관련 고민입니다.

0

91

1

실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.

0

107

2

성능 테스트 결과

0

117

2

게임 서버 Stateful, Stateless 진로 고민

0

147

1

WaitOnAddress와 Sleep의 차이 질문

0

98

1

궁금한거 있습니다.

0

92

2

JobTimer 구동 스레드

0

116

2

TryPop() 동작 관련 질문

0

86

1

로드맵 C#서버 C++서버 방향성 질문

0

162

2

스레드 id를 출력할떄 메인스레드 id도 출력되나요?

0

81

1

생명주기를 위한 의도적 복사

0

94

2

락프리의 실무에서 사용 질문

0

154

2

32bit threadID와 16비트 상위 WriteFlag에 대해

0

109

2

mutex와 sleep 차이점

0

133

1

실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다

0

167

2

Stomp Allocator의 Release함수에 대한 질문입니다.

0

102

1

공부법 관련해서

0

190

2

MakeShared 함수 관련

0

119

1

지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.

0

152

2

운영체제관련 질문입니다

0

144

1

send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.

0

125

2