인프런 커뮤니티 질문&답변
HandlerMove lock 관련 질문 드립니다.
작성
·
242
답변 1
0
Rookiss
지식공유자
네 맞습니다. 그리고 아주 잘하고 계십니다 ㅎㅎ
처음엔 어느 부분이 경합이 일어나는지조차 헷갈리는데요.
(특히 C++ 시작해서 메모리에 대한 이해가 있는 상황이 아니라면)
여기선 movePacket는 1개의 쓰레드에서만 알아 문제 없지만,
player가 경합해서 사용하는 객체입니다.
문제 되는 부분은 빨간색 부분이고, 특히 info.PosInfo를 덮어쓰고 있는데요.
좌표 갱신 측면에서 정말 깐깐하게 먼저 온 패킷 순서대로 해줘야 한다면
락을 잡고 보장을 처리해줘야 할 것이고, 크게 상관없다면 락을 걸지 않더라도 되겠죠.
나중에 가서 골드라거나 더 중요한 정보가 있다면 락은 걸어줘야
이상한 상황을 예방할 수 있을겁니다.
(ex. 골드가 두번 연속으로 setgold(1000), setgold(500)을 순차적으로 요청했는데,
락을 안 걸고 타이밍 이슈로 뒤에부터 실행되면서 최종 골드가 500이 아닌 1000이 될 수도 있겠죠)




