inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Series phát triển game MMORPG bằng C# và Unity] Part7: Triển khai nội dung MMO (Cơ bản về liên kết Unity + Server C#)

Hàng đợi công việc

FindPlayer 외부에서 호출

311

theherojho2519

21 câu hỏi đã được viết

0

JobQueue 강의 14분 쯤에 FindPlayer같이 GameRoom과 관련된 함수들은 완전 엉뚱한 외부에서 호출되면 크래시가 난다고 하셨는데, 이부분이 이해가 잘 안됩니다.

이제 따로 주방장이 있으니 일감을 던져주기만 하는 식으로 로직의 스타일이 변한거는 알겠는데,

전혀 엉뚱한 곳에서(ClientSession) FindPlayer를 호출 한다고 하더라고 주방장은 주방장대로 JobQueue에 담긴 일을 처리하고 있고,

FindPlayer를 쌩으로 호출한 스레드는 알아서 FindPlayer를 처리할 것 같고,

FindPlayer의 경우는 또 _players(Dictionary)를 foreach로 순회하면서 Read만 해서 Lock을 안걸어줘도 문제가 안될거 같은데

왜 쌩으로 호출을 하면 안되나요?

C# unity

Câu trả lời 2

2

Rookiss

FindPlayer를 쌩으로 호출한 스레드는 알아서 FindPlayer를 처리할 것 같고,

-> 바로 '알아서' 처리하는게 문제입니다.

FindPlayer의 경우는 또 _players(Dictionary)를 foreach로 순회하면서 Read만 해서 Lock을 안걸어줘도 문제가 안될거 같은데

-> 본인만 _players(Dictionary)를 Read만 한다고 안전한게 아닙니다.
JobQueue를 호출하는 쪽에서 _players를 Write할 수 있기 때문이죠.
JobQueue를 사용할 때는 실행하는 쓰레드 = 1개라는 가정을 하고
코드가 만들어지기 때문에 Lock을 전혀 걸지 않고 있고,
그 상황에서 누군가가 공유 데이터에 접근하면 문제가 일어날 수 있습니다.

0

theherojho2519

감사합니다!

MessagePack

0

84

1

본인 플레이어 이동 관련 질문

0

49

1

Part7 Part9 질문이 있습니다.

0

72

1

.

0

116

1

.

0

105

2

게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제

0

91

1

타일 팔레트 깔았는데도 안돼요

0

115

2

2D로 그냥 만들어도 되나요?

0

81

2

지난 강의와 이어지는게 맞을까요?

0

80

2

순환참조 문제로 인해 발생하는 문제는 없을까요?

0

162

2

유니티 클라와 C++서버연동

0

277

2

멀티플레이 테스트 환경 관련 질문입니다

0

207

3

강의 후반부에 순서 동기화를 위해 잡큐를 사용 안 한 부분 질문입니다!

0

150

2

코드 관련한 몇 가지 질문입니다!

0

153

2

3d 프로젝트 이동 동기화 관련

0

321

4

파트 7 스트레스 테스트 질문 드립니다.

1

189

2

맵 이동 방식

0

133

0

맵 이동 관련해서 질문드립니다.

0

91

1

안녕하세요 도저히 알 수 없는 오류가 나와서 질문드려요,,

0

201

2

안녕하세요. 일전에 질문 드린 포폴 준비 관련 질문의 추가 질문입니다!

0

159

1

[팁] 2024년 기준 버전 이슈?

0

453

1

SendBuffer.cs 삭제 후 대체 되는 부분의 장단점?

1

200

1

지금 강의의 유니티 클라를 IOCP 서버와 연동하는 것

0

333

2

PushAfter 사용 질문

0

189

1