인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

_G님의 프로필 이미지

작성한 질문수

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

ReaderWriterLock 구현 연습

ReaderWriteLock 구현연습 count 관련 질문 [해결했습니다]

작성

·

67

·

수정됨

0

ReaderWriteLock 구현 연습 강의 잘 봤습니다.

강사님 환경에서는 10만번을 돌려도 락 구성이 잘 돌아가서 count가 0이 나옵니다.

제 환경에서는 Debug 모드, Release 모드 일 때

  • Debug: count 수가 꽤 자주 바뀝니다.

  • Release: count 수가 0이 나올 확률이 Debug보다 약간 높습니다.

또한 컴퓨터를 리부팅 하고 돌려보면 10번중에 2번은 count의 수가 바뀝니다.

 

질문

CPU나 메모리 환경, 켜져있는 프로그램에 따라서 Lock 구현이 실패하는 경우가 있을까요?

 

제 환경입니다.

AMD Ryzen 5 3600XT 6-Core Processor

메모리 32GB

답변 2

0

_G님의 프로필 이미지
_G
질문자

Task.WaitAny() 함수를 써서 생기는 문제였어요 ㅠㅠ
Task.WaitAll()을 쓰니 정상적으로 작동합니다

ㅠㅠㅠㅠㅠㅠ

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. _G님.

ReaderWriteLock 구현과 관련하여 질문 주셨습니다. 특정 환경에서 동작이 다른 이유에 대해 궁금해 하시는군요.

ReaderWriteLock, Debug vs. Release 차이 이해

  • Debug 모드: 프로그램의 정확성을 확인하기 위해 다양한 정보를 출력하며, 최적화가 덜 되어 있어 코드의 단계별 실행 검증에 용이합니다.
  • Release 모드: 성능 최적화를 적용하여 실행되므로, 디버깅 정보를 제공하지 않습니다. 이로 인해 보다 빠르게 실행됩니다.

환경에 따른 락 동작의 변동

  1. CPU 및 메모리 영향: 락의 동작은 시스템의 하드웨어, 특히 CPU와 메모리의 상태에 따라 영향을 받을 수 있습니다. 여러 쓰레드가 경합을 벌이는 상황에서 다양한 컨텍스트 스위칭과 캐시 상태가 결과에 영향을 줄 수 있습니다.

  2. 프로그램 및 시스템 환경: 실행 당시 시스템에 백그라운드로 실행 중인 프로그램들의 영향도 없지 않습니다. 각각의 프로그램이 CPU와 메모리를 얼마만큼 점유하고 있는지, 또는 시스템이 얼마나 바쁘게 동작하고 있는지에 따라 변동이 생길 수 있습니다.

유사한 문제 사례 및 해결법

비슷한 경험을 다룬 게시물을 아래에 소개해 드립니다:

  1. 스핀락이 올바르게 작동하지 않는 것 같습니다.

    • 쓰레드 동기화 문제와 관련하여 발생할 수 있는 여러 원인과 그 해결 방법에 관한 토론입니다.
  2. 이해한 것이 맞는지 - Debug와 Release의 차이점

    • Debug와 Release 모드의 차이를 다루며 다양한 테스트 케이스에서의 결과 차이를 설명합니다.

질문 내용에 기반하여 CPU나 메모리 환경 등 외부 요인이 락 구현 실패에 영향을 줄 수 있다는 점을 파악할 수 있습니다. 다양한 환경에서의 테스트를 통해 안정적인 소프트웨어 개발이 가능할 것입니다.

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

_G님의 프로필 이미지

작성한 질문수

질문하기