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

률루랄라님의 프로필 이미지
률루랄라

작성한 질문수

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

유니티 연동 #2

Packet Queue 질문

해결된 질문

작성

·

306

0

안녕하세요. "Rookiss"님,

Packet Queue에 대해서 질문드리려고 합니다.

Push() 에 대해서는 BackGround Thread가 계속 Push하므로 lock을 거는 이유가 맞다고 생각되는데 Pop()에 대해서는 Unity의 Main-Thread만 사용한다면 따로 lock을 걸 필요가 없다고 생각되는데 혹시 다른 이유가 있어서 lock을 거신건가요??

답변해주시면 감사하겠습니다!

답변 1

4

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

Pop을 유니티 메인 쓰레드에서만 사용하는 것은 맞지만,
동일한 데이터를 다른 쓰레드들이 Push를 하면서 건드리고 있기 때문에
유니티 메인 쓰레드에서도 lock을 걸어줘야 합니다.
lock은 함수 단위가 아니라 데이터 단위로 생각하셔야 합니다.

Queue 및 기타 자료구조에 대해, 
한 쓰레드는 Push만 하고 한 쓰레드는 Pop만 하면
문제가 없다고 생각할 수도 있지만,
자료구조 내부 로직을 잘 생각해보면 문제가 된다는 걸 알 수 있습니다.

률루랄라님의 프로필 이미지
률루랄라

작성한 질문수

질문하기