inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

JobQueue #1

JobQueue관련

258

BBAKK

작성한 질문수 35

1

public void Push(Action job)

{

     bool _flush=flase;

     lock(_lock)

     {

          jobQueue.Enqueue(job);

          if(flush==false)

               _flush=flush=true;

     }

     if(_flush)

          Flush();

}

위 함수의 일부인 flush 여부 확인 부분에서

if(flush==false)

     _flush=flush=true;

저의 짧은 생각으로는  Push() 와 Pop() 메소드에서 jobQueue에 대한 배타적접근을 하므로

아래와 같이 flush의 false여부를 확인하고 바로 Flush()함수를 수행할지 결정해도 되지않을까 생각하는데, 제 생각의 어떤부분에 오류가 있는지 궁금합니다.

if(flush==false)

{

     flush=true;

     Flush();

}

unity network C#

답변 3

5

Rookiss

네 맞습니다. 그러니  lock(_lock) 안에 Flush가 있으니,
혹시라도 Flush 하는 부분이 오래 걸리면
다른 쓰레드들의 불필요한 대기가 길어진다는 의미였습니다.

2

Rookiss

미묘한 차이가 있는데 말씀하신대로 하면 락을 잡고 Flush를 하는 것이기 때문에,
혹시라도 Flush 과정이 오래걸리면,
다른 쓰레드들이 대기를 해야 합니다.
반면 첫번째 버전에서는 먼저 실행할 쓰레드만 가려내기 위해 잠시만 락을 잡은 후,
승자만 가려내고 락을 재빨리 풀어버리기 때문에 
대기 시간이 상대적으로 짧아집니다.

참고로 if(flush==false) 가 아니고 if (_flush==false) 입니다! ㅎㅎ

0

BBAKK

public void Push(Action job)

{

     bool _flush=flase;

     lock(_lock)

     {

          jobQueue.Enqueue(job);

          if(flush==false)

          {

               flush=true;

               Flush();

          }

     }

}

이렇게 바꾸는걸 여쭤본거 였어요 ㅎㅎ

TLS 질문드립니다.

0

40

2

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

0

46

2

Unity Span

0

75

2

XML, Dll 차이점

0

103

2

Session 질문입니다

0

78

1

Write Read 커서 키워드

0

72

1

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

0

69

2

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

0

97

2

UnhandledException 으로 서버 터지는 경우

0

84

2

컨텐츠 단, 엔진 단

0

103

1

질문 있습니다

0

76

2

C# 게임서버 3D MMORPG

0

143

2

유니티6 버전

0

96

2

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

0

132

2

커서의 위치의 중요성

0

102

2

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

0

169

2

강의에 질문이 있습니다

0

85

2

멀티스레드 이해도 질문

0

94

1

500 vs 500

0

127

3

OnAcceptHandler 액션 함수

0

60

1

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

0

187

2

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

0

81

2

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

0

104

1

스핀락 질문.

0

109

2