-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
OnRecvCompleted 관련해서 질문있습니다.
21.06.24 22:06 작성 조회수 147
2
안녕하세요~ Session.cs에 OnRecvComplete하는 부분에 왜 락을 걸지 않는지 궁금합니다!
공유된 RecvBUffer를 사용하고 있어서.. 사용해야 할것 같다고 생각했습니다.
답변을 작성해보세요.
2
Rookiss
지식공유자2021.06.25
예리한 질문인데요.
멀티쓰레드 환경이라고 항상 락이 필요한 것은 아니고,
정말 다수의 쓰레드가 동시에 접근할 수 있는지가 관건입니다.
그런데 Recv는 Send와 다르게, 오직 1번에 1개의 쓰레드만 접근할 수 있습니다.
코드를 유심히 보면 처음에 RegisterRecv를 걸어주고,
Recv가 완료되면 OnRecvCompleted가 호출되고,
이어서 다시 RegisterRecv를 해주게 됩니다.
즉 Register->Completed->Register->Completed 반드시 이 순서로 진행되며,
우리가 RegisterRecv를 최초 1개만 걸어놨기 때문에
Register->Completed->... 과정도 오로지 한 번에 1개만 일어납니다.
비유하면 낚시대를 1개만 던져 놓은 것이죠.
답변 1