inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

메모리 배리어

마지막 18:00분 질문

272

starkshn

작성한 질문수 134

2

 

 

위의 사진처럼 A, B가 멀티쓰레드 환경에서 실행이 된다고 가정을 하셨는데

A.Start();

B.Start();를 해주게 되면은

 

가시성 확보를 해주어서

A쓰레드는 

  _answer = 123;

            Thread.MemoryBarrier();

이렇게 하면 메모리에 _answer =123값이 올라가게 되고

 

그다음에  메모리 베리어로 물을 내리고(가시성확보)

 

그다음

 

_complete = true;

            Thread.MemoryBarrier();

의 작업을 해주게 되는데

 

B쓰레드의 경우

메먼저 메모리 베리어에서 가시성 확보를 위해(read를 하기위해) 메모리 베리어를 호출을 하고

 

if(_complete)로 읽어왔는데

 

멀티 쓰레드 환경이면 B는 실행을 하여도 A쓰레드에서 _complete를 true로 바꾸기전에 

같이 실행을 하면 B는 실행이 되지만 if문에 걸리지 않아 바로 종료를 하게 되지 않나요???

 

 

C# network unity

답변 1

2

Rookiss

네 물론 그런데요.

위 내용에서 핵심은 if (_complete) 가 true라서 
Console.WriteLine()이 실행되었음에도 출력되는 숫자가  123이 아닐 수 있다!!
~는 쇼킹한 사실에 있습니다.

물론 이론적으로 그렇긴 한데 우리가 사용하는 프로세서에서는
재현되지 않아 정말 이론적으로만 알고 넘어가면 됩니다.

0

starkshn

아하 그렇군요 감사합니다~~

C#에서의 RAII

0

65

3

TLS 질문드립니다.

0

79

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

74

2

Unity Span

0

97

2

XML, Dll 차이점

0

134

2

Session 질문입니다

0

96

1

Write Read 커서 키워드

0

88

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

85

2

네트워크 Send 전담 스레드 배치

0

112

2

UnhandledException 으로 서버 터지는 경우

0

102

2

컨텐츠 단, 엔진 단

0

118

1

질문 있습니다

0

92

2

C# 게임서버 3D MMORPG

0

159

2

유니티6 버전

0

106

2

receive하는 부분과 send하는 부분의 차이

0

153

2

커서의 위치의 중요성

0

110

2

C++ 전혀 모르는데 C# 서버

0

176

2

강의에 질문이 있습니다

0

92

2

멀티스레드 이해도 질문

0

107

1

500 vs 500

0

147

3

OnAcceptHandler 액션 함수

0

70

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

204

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

85

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

112

1