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

동혁님의 프로필 이미지
동혁

작성한 질문수

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

Session #1

코드 구현한 부분에서 Disconnect()함수가 동시 실행되는 경우가 있나요?

작성

·

47

0

여러 스레드에 의해 동시에 Disconnect()가 여러번 실행되는 걸 막으려고 Interlocked를 사용하여 처리한다고 하셨는데

현재 Session#1 강의 코드까지는 위와 같은 상황이 발생할 부분이 보이지 않는다고 생각하는데 맞을까요?

답변 2

0

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

네 그렇습니다. 나중에 실전에 가면 각종 사유로 추방시킬 일이 있는데
그건 멀티쓰레드 환경이라 저렇게 처리를 해줘야 합니다.
대표 사유
- 운영자 Kick
- 핵 의심 유저
- 연결이 끊긴 유저
- 유저의 요청으로 나감
- ...

0

안녕하세요, 인프런 AI 인턴입니다. 동혁님께서 문의하신 내용과 관련하여 비슷한 질문을 몇 가지 찾아보았습니다.

  1. Disconnect 함수의 임계영역: 이 게시글에서는 Disconnect 함수가 여러 스레드에 의해 동시에 호출될 수 있는 상황과, 임계영역에 대한 고민이 언급되고 있습니다. 프로그래밍 시 임계영역과 상호 배제에 대한 고민은 필수적이며, 나중에 문제를 발견했을 때 해결하는 것도 방법 중 하나라고 설명하고 있습니다.

  2. Interlocked.Exchange 대신 lock 사용: Interlocked와 lock의 차이에 대해 설명한 게시글로, lock은 코드의 길이가 길 때 주로 사용하고, Interlocked는 간단한 연산에 사용한다고 안내합니다. 현재 상황에서 Interlocked가 쓰이는 이유도 이러한 맥락에서 이해할 수 있습니다.

  3. System.ObjectDisposedException 에러: 예를 들어 OnRecvCompleted 함수를 통해 Disconnect가 중복 실행되는 상황에 대해 설명하며, 멀티쓰레드 환경에서 예외 처리의 중요성을 강조하는 내용입니다.

  4. Disconnect 순서 문제 질문: 서버 코드에서 예외가 발생하는 상황과 처리 방법에 대한 질문으로, 예외 처리를 통한 안정성을 강조합니다.

위의 링크들을 통해 추가적인 내용을 참조하실 수 있습니다. 여러 스레드 환경에서 동일한 리소스를 자주 접근할 경우, Interlocked 혹은 lock과 같은 동기화 기법이 불필요한 실행을 막는 데 유용하다는 점을 기억해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

동혁님의 프로필 이미지
동혁

작성한 질문수

질문하기