인프런 커뮤니티 질문&답변
OnRecvCompleted 관련해서 질문있습니다.
작성
·
254
퀴즈
62%나 틀려요. 한번 도전해보세요!
네트워크 기초 이론 학습이 서버 프로그래밍에 중요한 이유가 무엇일까요?
서버 하드웨어 선택에 도움이 되어서
동시 접속 처리 및 해킹 방어 등 안정성 확보를 위해
데이터베이스 설계를 더 효율적으로 할 수 있어서
클라이언트 UI 디자인 실력을 향상시켜서
답변 1
2
Rookiss
지식공유자
예리한 질문인데요.
멀티쓰레드 환경이라고 항상 락이 필요한 것은 아니고,
정말 다수의 쓰레드가 동시에 접근할 수 있는지가 관건입니다.
그런데 Recv는 Send와 다르게, 오직 1번에 1개의 쓰레드만 접근할 수 있습니다.
코드를 유심히 보면 처음에 RegisterRecv를 걸어주고,
Recv가 완료되면 OnRecvCompleted가 호출되고,
이어서 다시 RegisterRecv를 해주게 됩니다.
즉 Register->Completed->Register->Completed 반드시 이 순서로 진행되며,
우리가 RegisterRecv를 최초 1개만 걸어놨기 때문에
Register->Completed->... 과정도 오로지 한 번에 1개만 일어납니다.
비유하면 낚시대를 1개만 던져 놓은 것이죠.






안녕하세요~ Session.cs에 OnRecvComplete하는 부분에 왜 락을 걸지 않는지 궁금합니다!