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

홍지범님의 프로필 이미지
홍지범

작성한 질문수

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

ReaderWriterLock 구현 연습

비트 마스크를 사용하는 이유가 무엇인가요?

작성

·

343

·

수정됨

1

안녕하세요.

강의 정말 잘 듣고 있습니다.

처음에는 단순 게임 서버를 구현하는 강의라고 생각했는데, 이론으로만 보던 CS, 네트워크 지식을 직접 구현해보면서 하니 기본기 다지는데 정말 도움이 되네요.

그리고 꽤나 자바와 같은 모던 언어를 사용하다보니 깊게 생각하지 않던 부분도 고민할 수 있는 최고의 강의인것 같습니다.

 

질문으로 돌아가서

  1. 비트 마스크를 사용하는 이유가 C# 에서 원자적 연산을 제공하는 Interlocked 클래스 함수의 파라미터 때문인가요?


    처음에는 writer, reader를 체크할 수 있는 클래스 변수를 따로 만들면 되지 않을까? 라고 생각했는데 그렇게 되면 if, if 이런 조건문이 계속 들어가서 원자적 연산이 어려워 져서 그런가요?(별도로 락이나 모니터로 잡을 수 있지만 가독성 측면에서도 그렇고, Interlocked가 표준화 되어 있기 때문에 저렇게 사용하나? 추측합니다.)

    • 몇개의 질문을 살펴보니 비트마스크와 Interlocked의 CompareExchange의 조합이 강력하네요.

 

  1. 지금 강의는 언어 레벨에서 지원하는 읽기 쓰기 락 동작 원리를 보여주신 것인데 실제 프로덕션 코드에서 사용하려면 락 타임아웃 같은것도 구현해야하나요?
    생각해보면 어떠한 경우에 읽기 락이 많이 쌓이고 해제하지 못한 경우일 때 쓰기락에 대기시간이 길어지니 일정 시간 후 락 해소를 시켜줘야 하나 궁금하네요.

답변 1

0

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

네 이미 다른 답글을 보셔서 눈치 채셨겠지만,
CAS를 사용할 때는 그것을 단계별로 나누어서 if 처리가 안 됩니다.
그러면 애당초 thread-safety가 깨지기 때문입니다.

옛날 소스코드에선 락도 직접 구현하는 경우도 있었지만
사실 요즘은 그러지는 않습니다.

홍지범님의 프로필 이미지
홍지범

작성한 질문수

질문하기