작성
·
236
답변 1
2
예리한 질문인데요.
멀티쓰레드 환경이라고 항상 락이 필요한 것은 아니고,
정말 다수의 쓰레드가 동시에 접근할 수 있는지가 관건입니다.
그런데 Recv는 Send와 다르게, 오직 1번에 1개의 쓰레드만 접근할 수 있습니다.
코드를 유심히 보면 처음에 RegisterRecv를 걸어주고,
Recv가 완료되면 OnRecvCompleted가 호출되고,
이어서 다시 RegisterRecv를 해주게 됩니다.
즉 Register->Completed->Register->Completed 반드시 이 순서로 진행되며,
우리가 RegisterRecv를 최초 1개만 걸어놨기 때문에
Register->Completed->... 과정도 오로지 한 번에 1개만 일어납니다.
비유하면 낚시대를 1개만 던져 놓은 것이죠.