12분 40초 질문
243
작성한 질문수 134
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에서 락을 건 이유는 그냥 데이터를 안전하게 꺼내기 위함이고...
이렇게 이해했는데 맞을까요??
답변 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





