inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

JobQueue #1

12분 40초 질문

243

starkshn

작성한 질문수 134

0

 

1. A라는 쓰레드가 Push에서 락을 잡는다.(다른애가 Push를 못하는 상황) 

그리고 _jobQueue에다가 일감을 밀어 넣는다.

 

2. lock 안에서 flush가 true로 바뀌어서 Flush함수로 간다.

 

 

3. A쓰레드는 Flush함수에 들어와서 while문안에서 Pop을 한다.

 

 

4. Flush에서 Pop을 하는 순간 A는 락을 잡고 "_jobQueue.Count == 0" 이 될때까지

retrun _jobQueue.Dequeue();를 하면서 Flush의 while문을 돌게된다.

*********

 

<질문>

 

 

A라는 쓰레드가 Push에 와서 최초의 _flush를 true로 바꾸어 주어서

모든 쓰레드들이 접근이 가능한 _flush는 true인 상태여서

A가 Flush함수를 실행하러 계속 안에 있고

 

다른 B라는 쓰레드가 Push에와서 락을 잡고 일감을 밀어 넣는다고 해도 

_flush는 true라서 

Push안의 flush를 true로 바꿀 수 없어서 

if (flush)에 조건이 안맞아 락만 걸고 일감을 밀어넣고 나오고

 

A만 Flush를 실행할 수 있고 A만 Flush함수에 계속 상주해 있고

 

다른애들이 계속 일감만 밀어 넣어주는 방식인가요??

 

Pop에서 락을 건 이유는 그냥 데이터를 안전하게 꺼내기 위함이고...

 

이렇게 이해했는데 맞을까요??

 

 

 

 

 

network C# unity

답변 1

0

Rookiss

말 그대로 딱 1개의 쓰레드만 실행을 담당하게 하기 위함입니다.

C#에서의 RAII

0

62

3

TLS 질문드립니다.

0

79

2

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

0

74

2

Unity Span

0

97

2

XML, Dll 차이점

0

134

2

Session 질문입니다

0

95

1

Write Read 커서 키워드

0

87

1

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

0

85

2

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

0

111

2

UnhandledException 으로 서버 터지는 경우

0

102

2

컨텐츠 단, 엔진 단

0

118

1

질문 있습니다

0

92

2

C# 게임서버 3D MMORPG

0

159

2

유니티6 버전

0

104

2

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

0

152

2

커서의 위치의 중요성

0

110

2

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

0

176

2

강의에 질문이 있습니다

0

92

2

멀티스레드 이해도 질문

0

106

1

500 vs 500

0

147

3

OnAcceptHandler 액션 함수

0

70

1

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

0

203

2

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

0

85

2

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

0

112

1