강의

멘토링

로드맵

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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

ReaderWriterLock 구현 연습

ReaderWriterLock 구현 연습 파트 질문입니다!

해결된 질문

작성

·

350

6

ReadLock() 작성 중에 조건이

아무도 WriteLock을 획득하고 있지 않으면 ReadCount를 1 늘린다 라서

if ( (_flag & WRITE_MASK) == 0 ) 이 코드는 이해하겠는데

Interlocked를 사용하면서 이 부분이 사라지고

int expected = (_flag & READ_MASK);
                    if (Interlocked.CompareExchange(ref _flag, expected + 1, expected) == expected)
                        return;

이렇게 작성이 되었는데요.

이러면 WriteLock 체크를 무시하는 것이 아닌가요?

코드로만 보면 WriteLock 영역은 모두 0으로 날려버리는 것이니 WriteLock이 있던 없던 그냥 Read 하겠다라고 이해되어서요.

퀴즈

멀티쓰레딩 개론에서 프로그램(프로세스)에 비유된 것은 무엇일까요?

CPU 코어

쓰레드

운영체제

레스토랑

답변 3

2

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

ㅎㅎ 맞습니다.
저 부분이 은근 이해하기 어려운데,
깨우침을 얻으셨다니 축하드립니다.

2

아! 이제 이해했습니다.

expected 값은 WriteLock이 없는 상태의 값이고 이 값을 WriteLock이 있는 _flag랑 비교를 하니 당연히 WriteLock이 있는지 없는지 다 체크를 할 수 밖에 없겠네요.

캬~

0

간단하고 명료한 강의덕분입니다! 감사합니다 ㅎㅎ

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기