인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

igbtkd님의 프로필 이미지
igbtkd

작성한 질문수

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

메모리 모델

안녕하세요 선생님!

작성

·

312

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;
}

답변 1

1

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

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

igbtkd님의 프로필 이미지
igbtkd

작성한 질문수

질문하기