-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
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을 걸어줘야한다.
대충 이렇게 이해했는데 이해한게 맞을까요..?
답변을 작성해보세요.
2
Rookiss
지식공유자2022.01.15
안녕하세요
질문주신 부분은 잘 이해하셨습니다.
팁을 드리자면 [제대로 이해한 것이 맞는지] 확인하는 질문은 굳이 하실 필요가 없습니다.
어차피 모든 정답은 코드에 있고,
혹시라도 본인이 이해하신 것이 잘못됐다면,
언젠가 그 모순점을 깨닫게 되실텐데
그러면서 또 엄청 성장을 할 수 있습니다.
앞으로도 늘 남의 코드를 볼 일이 많을텐데
그 때는 정말 코드의 의도를 일일히 알려줄 사람이 없을테니
스스로 가정을 세우고, 그 가정에 맞게 분석하는 연습이 필요합니다.
답변 1