• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Send하는부분 전체적인 로직 질문입니다.

22.01.14 15:59 작성 조회수 183

1

Send함수 :

_pending이 true일 때 -> 지금 RegisterSend를 하고 있으니 등록하지 않고 대기열(큐) 에 넣어준다.

_pending이 false일 때 -> 지금 RegisterSend를 하고있지 않으니 RegisterSend를 실행한다.

동시에 Send를 실행할 수 있으니 lock을 걸어줘야 한다.

 

RegisterSend함수:

_pending을 true로 바꿔서 실행중이라는 것을 표시, 큐에서 버퍼 하나를 꺼내서 SendAsync를 비동기로 실행, 완료되면 OnSendCompleted를 호출한다.

Send에서 호출하는 경우와 OnSendCompleted 에서 호출하는 두 가지 경우가 있지만, Send에서는 _pending이 false일때 호출, OnSendCompleted에서는 _pending이 true일 때 호출하기 때문에 lock을 걸어주지 않아도 된다.

 

OnSendCompleted 함수:

RegisterSend을 하는 동안 큐에 쌓인 버퍼를 전부 처리하고 _pending을 false로 바꿔서 일을 끝냈다고 표시한다.

직접 호출과 콜백 두 가지 경로로 올 수 있기 때문에 lock을 걸어줘야한다.

 

대충 이렇게 이해했는데 이해한게 맞을까요..?

답변 1

답변을 작성해보세요.

2

안녕하세요

질문주신 부분은 잘 이해하셨습니다.
팁을 드리자면 [제대로 이해한 것이 맞는지] 확인하는 질문은 굳이 하실 필요가 없습니다.
어차피 모든 정답은 코드에 있고,
혹시라도 본인이 이해하신 것이 잘못됐다면,
언젠가 그 모순점을 깨닫게 되실텐데
그러면서 또 엄청 성장을 할 수 있습니다.

앞으로도 늘 남의 코드를 볼 일이 많을텐데
그 때는 정말 코드의 의도를 일일히 알려줄 사람이 없을테니
스스로 가정을 세우고, 그 가정에 맞게 분석하는 연습이 필요합니다.