_pendingList 와 lock 질문
347
작성한 질문수 24
- void RegisterSend()
- {
- //
- // a[][][][][][][][][][][][][][][][]
- while (_sendQueue.Count > 0)
- {
- byte[] buff = _sendQueue.Dequeue();
- _pendingList.Add(new ArraySegment<byte>(buff, 0, buff.Length));
- }
- _sendArgs.BufferList = _pendingList;
- bool pending = _socket.SendAsync(_sendArgs);
- if (pending == false)
- OnSendCompleted(null, _sendArgs);
- }
1.
_sendQueue.Count > 0 말고
바로
_sendArgs.BufferList .Count > 0 로 하는게 좋지 않나요
굳이 따로 만들어서 담는 이유가 있나요?
_sendArgs.BufferList = _pendingList;
----------------------------------------------------------
public void Send(byte[] sendBuff)
{
lock (_lock)
{
_sendQueue.Enqueue(sendBuff);
if (_pendingList.Count == 0)
RegisterSend();
}
}
2.
c#에서 같은 쓰레드인 경우는 락을 무시하고 들어갈수 있는게 맞나요??
3.
지금 코드는 멀티쓰레드 기준으로 만들었는데
실행은 싱글쓰레드로 작동하나요? Thread를 따로 만들지 않고 실행하는데.
답변 1
1
1.
_sendArgs에는 기존에 보냈던 데이터가 물려 있어서 별도로 관리합니다.
다만 세세한 부분에 대한 궁금증은 일단 원하시는대로 수정해보고
문제 없는지 직접 확인해보시는게 좋습니다.
2.
동일한 쓰레드 내에서만 뭔가 실행된다면 락을 잡을 필욘 없습니다.
(단 외부에서 다른 쓰레드가 개입하지 않는지 확인 필요)
3.
C#에서 네트워크 관련 비동기 함수들을 사용하면
자동으로 쓰레드 풀에서 쓰레드를 꺼내 완료 처리를 하기 때문에
자동으로 멀티쓰레드 환경입니다.
C#에서의 RAII
0
66
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
93
2
C# 게임서버 3D MMORPG
0
159
2
유니티6 버전
0
106
2
receive하는 부분과 send하는 부분의 차이
0
154
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
86
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
112
1





