Session #2 내용중 왜 스레드가 동시다발적으로 접근 불가능한지 질문
664
17 asked
Session#2 강의 시작부분에 설명해주신 내용에서,
SEssion의 receive는 OnRecvCompleted()메서드에 여러 스레드가 동시다발적으로 들어가는 경우는 없다.
라고 하셨는데, 왜 그런지 이해를 못했습니다.
ServerCore의 OnAcceptHandler는 콜백함수라서 콜백함수는 다른 스레드가 생겨나서 실행이 된다고 들었던 것 같은데,
그렇다면 두 스레드가 OnAcceptHandler에서 Session.Start()를 해버리면 OnRecvCompleted()메서드를 두 스레드가 동시에 실행할 경우가 생기지 않나요?
Answer 4
0
아래 코드처럼 Session session = new Session(); 이후에 그 한 세션의 session.Start를 여러 스레드가 수행하는 경우는 어떻게 되는건가요?
0
static void OnAcceptHandler(Socket clientSocket)
{
try
{
Session session = new Session();
session.Start(clientSocket);
//스레드 1,2가 session.Start를 하도록 수행
//보낸다( string to byte 해서)
byte[] sendBuff = Encoding.UTF8.GetBytes("welcome to mmorpg server");
session.Send(sendBuff);
Thread.Sleep(1000);
session.Disconnect();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.WriteLine(e);
}
}
0
동시에 2 쓰레드가 OnRecvCompleted를 호출할 수 있습니다.
하지만 호출된 다수의 OnRecvCompleted가 동일한 Session을 대상으로 호출될 수는 없다는게
핵심입니다. 그렇다면 락 처리가 필요 없다는 것이죠.
낚시대에 늘 비유를 하는데 낚시대를 하나만 던졌으면,
낚시꾼이 아무리 많더라도 동일한 낚시대는 한번만 끌어올릴 수 있겠죠
TLS 질문드립니다.
0
43
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
46
2
Unity Span
0
76
2
XML, Dll 차이점
0
105
2
Session 질문입니다
0
79
1
Write Read 커서 키워드
0
76
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
70
2
네트워크 Send 전담 스레드 배치
0
98
2
UnhandledException 으로 서버 터지는 경우
0
85
2
컨텐츠 단, 엔진 단
0
105
1
질문 있습니다
0
77
2
C# 게임서버 3D MMORPG
0
145
2
유니티6 버전
0
97
2
receive하는 부분과 send하는 부분의 차이
0
134
2
커서의 위치의 중요성
0
103
2
C++ 전혀 모르는데 C# 서버
0
169
2
강의에 질문이 있습니다
0
86
2
멀티스레드 이해도 질문
0
95
1
500 vs 500
0
130
3
OnAcceptHandler 액션 함수
0
61
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
191
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
82
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
106
1
스핀락 질문.
0
110
2

