inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

메모리 모델

안녕하세요 선생님!

394

igbtkd

작성한 질문수 8

0

인텔과 AMD의 경우 CPU의 순차적 일관성을 원래부터 보장한다고 말씀해주셨는데 이것이 atomic 클래스가 아닌 자료형에 대한 연산 또한 마찬가지인지 궁금해요.
또한 순차적 일관성이라는 의미가 저번에 설명해주신 CPU 파이프라인 상에서 저 네모들의 위치가 변경되지 않는다는 것을 말씀하신 것인지 알고 싶어요.

그게 맞다면 저번에 예제로 주신 아래의 코드가 CPU 파이프라인 단에서는  어셈블리의 실행 순서가 변경되는 최적화가 일어나지 않는 것인지 알고 싶어요.
해당 어셈블리를 살펴보면 컴파일러 단에서도 최적화를 하지 않는데도 언젠가 빠져나오는 것 보면 이것은 단순히 RAM에 최신정보가 반영되지 않은 메모리 가시성의 문제인지 알고 싶어요!

#include "pch.h"
#include <iostream>
#include <thread>
#include <atomic>
#include <mutex>
#include <future>
#include <windows.h>

int32 x = 0;
int32 y = 0;
int32 r1 = 0;
int32 r2 = 0;

volatile bool ready;

void Thread1()
{
	while (!ready);

	y = 1; // store y
	r1 = x; // load x
}

void Thread2()
{
	while (!ready);

	x = 1; // store y
	r2 = y; // load y
}

int main()
{
	int32 count = 0;

	while (true)
	{
		ready = false;
		count++;

		x = y = r1 = r2 = 0;

		thread t1(Thread1);
		thread t2(Thread2);

		ready = true;

		t1.join();
		t2.join();

		if (r1 == 0 && r2 == 0)
			break;
	}

	cout << count << " 번만에 빠져나옴" << endl;
}

메모리가시성 network CPU파이프라인 windows-server MMORPG

답변 1

1

Rookiss

순차적 일관성은 CPU의 파이프라인이나 실행 순서에 대한 얘기가 아니고,
캐시랑 연관성이 있는 부분입니다.
CPU 코어마다 캐시가 따로 있으니,
표준에 의하면 모든 코어마다 동일한 값을 관찰하지 못할 수도 있는데
인텔 환경에서는 의외로(?) 수정된 값을 읽는 것을 확인할 수 있습니다.

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

0

63

2

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

0

94

2

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

0

165

1

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

0

89

1

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

0

107

2

성능 테스트 결과

0

117

2

게임 서버 Stateful, Stateless 진로 고민

0

143

1

WaitOnAddress와 Sleep의 차이 질문

0

97

1

궁금한거 있습니다.

0

92

2

JobTimer 구동 스레드

0

116

2

TryPop() 동작 관련 질문

0

86

1

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

0

162

2

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

0

80

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

101

1

공부법 관련해서

0

189

2

MakeShared 함수 관련

0

118

1

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

0

152

2

운영체제관련 질문입니다

0

143

1

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

0

125

2