강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

코딩꾼님의 프로필 이미지
코딩꾼

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

PacketSession

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

작성

·

236

2

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

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

답변 1

2

Rookiss님의 프로필 이미지
Rookiss
지식공유자

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

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

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

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

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

코딩꾼님의 프로필 이미지
코딩꾼

작성한 질문수

질문하기