send와 lock
355
작성한 질문수 22
안녕하세요
강의 수강중 궁금증이 생겨서 질문 올립니다.
제가 제대로 이해한것이 맞다면
_sendBuff에 enqueue를 하는 부분 자체에 lock이 걸려있고
그 안에 RegisterSend가 실행되는 조건인 _pendingList에 add가 되는 유일한 조건이 RegisterSend인 상태인데
이러한 상황에서 SendQueue에 접근할 때 "다른 프로세스에서 미리 접근만 하고 아직 registerSend를 하지 않는 상황"이 존재할 수 있는지요
sendQueue에 접근 -> SendAsync 이라는 큰 틀 사이사이에 멀티쓰레드를 고려한 여러가지 안전장치들이 모두 시작점의 lcok에 걸려있어서 그 의미가 없어지는것이 아닌가 하는 생각이 듭니다.
감사합니다
답변 2
1
그 안에 RegisterSend가 실행되는 조건인 _pendingList에 add가 되는 유일한 조건이 RegisterSend인 상태인데
네 이건 맞지만, 간과하면 안되는 부분은
_socket.SendAsync() 부분이 비동기 함수라는 점입니다.
pending이 true라면, 나중에 네트워크 전송이 완료되는 시점에서
(보통) 다른 쓰레드를 통해 OnSendCompleted가 호출되겠죠.
OnSendCompleted 내부에서도 _sendArgs, _pendingList를 건드리고 있으니
RegisterSend, OnSendCompleted에 각각 lock을 잡아주지 않는다면
멀티쓰레드 이슈가 생길 수 있습니다.
TLS 질문드립니다.
0
39
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
45
2
Unity Span
0
73
2
XML, Dll 차이점
0
103
2
Session 질문입니다
0
78
1
Write Read 커서 키워드
0
72
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
68
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





