• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

OnRecvCompleted 관련해서 질문있습니다.

21.06.24 22:06 작성 조회수 147

2

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

공유된 RecvBUffer를 사용하고 있어서.. 사용해야 할것 같다고 생각했습니다.

답변 1

답변을 작성해보세요.

2

예리한 질문인데요.
멀티쓰레드 환경이라고 항상 락이 필요한 것은 아니고,
정말 다수의 쓰레드가 동시에 접근할 수 있는지가 관건입니다.
그런데 Recv는 Send와 다르게, 오직 1번에 1개의 쓰레드만 접근할 수 있습니다.

코드를 유심히 보면 처음에 RegisterRecv를 걸어주고,
Recv가 완료되면 OnRecvCompleted가 호출되고,

이어서 다시 RegisterRecv를 해주게 됩니다.

즉 Register->Completed->Register->Completed 반드시 이 순서로 진행되며,
우리가 RegisterRecv를 최초 1개만 걸어놨기 때문에

Register->Completed->... 과정도 오로지 한 번에 1개만 일어납니다.
비유하면 낚시대를 1개만 던져 놓은 것이죠.