inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

메모리 모델

가시성과 코드 재배치에 관해서 문의드립니다.

758

yilee

작성한 질문수 9

0

안녕하세요.

강사님... 멀티스레드 부분에서 나오는 개념이 어려워 나름의 생각 정리 후 맞는지 확인차 질의드립니다.

1) 동일한 객체에 대해 동일한 수정 순서를 보장한다.        만약 공유자원 A에 스레드 1, 2, 3이 지속적으로 접근
    한다고 할 때(Producer 처럼 while(true) { ... } 구조)
    특정 시점에 스레드 1이 A에 저장된 값을 읽었고
    바로 스레드 2가 A에 저장된 값을 읽었다면
    스레드 2가 공유자원 A에서 읽은 값은 적어도
    스레드 1이 공유자원 A에서 읽은 값을 포함하여
    이후 시점에 변경된 값이 읽혀진다.

2) 코드 재배치
   - 코드 재배치는 Cache에 의한 재배치,
     CPU 파이프라인에 의한 재배치가 있다.
     -> 단일 스레드에서는 코드 재배치가 이루어져도
         절차에 맞게 결과가 나왔지만, 멀티스레드일때는
         코드 재배치에 의해 원하는 결과가 나오지 않을
         수 있다. 

3) 가시성 보장이란
    - 스레드 1에서 공유 자원에 대한 값을 변경하고,
      바로 스레드 2가 공유 자원에 대한 값을 읽었을 때
      스레드 1에서 변경한 값이 읽혀지는 것
      (스레드 1의 캐시에서 메모리에 값을 반영한 것) 

4) lock_guard<mutex> lock(m);
   - 해당 코드도 결국에는 단일 스레드에서 동작하는 것
     과 동일하기에 원자성을 보장한다고 보아야 되는 것
     인지요 ?... 원자성을 보장한다면 동일 객체에 대한
     수정 순서를 보장한다고 보면 되는 것이 맞는지
     궁금합니다. (코드 재배치 문제는 별 문제가 안될
     거 같지만, 가시성은 보장하는지도 궁금해요 ㅠㅠ)

 

이정도로 해석해도 되는 부분인지요 ..  

가시성 network 코드재배치 멀티스레드 MMORPG windows-server

답변 1

0

Rookiss

네 이해하신게 맞습니다.
락을 걸면 원자성, 수정 순서 보장 등 문제들도 해결이 됩니다.

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

0

43

2

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

0

79

2

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

0

143

1

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

0

73

1

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

0

96

2

성능 테스트 결과

0

113

2

게임 서버 Stateful, Stateless 진로 고민

0

135

1

WaitOnAddress와 Sleep의 차이 질문

0

89

1

궁금한거 있습니다.

0

87

2

JobTimer 구동 스레드

0

113

2

TryPop() 동작 관련 질문

0

83

1

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

0

155

2

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

0

75

1

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

0

92

2

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

0

148

2

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

0

105

2

mutex와 sleep 차이점

0

124

1

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

0

164

2

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

0

100

1

공부법 관련해서

0

187

2

MakeShared 함수 관련

0

116

1

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

0

148

2

운영체제관련 질문입니다

0

134

1

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

0

122

2