inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Reader-Writer Lock

Read-Writer Lock 관련 질문드립니다.

585

literate_t

작성한 질문수 68

0

안녕하세요.

제가 제대로 이해한 게 맞을까요.

1. Write lock

ㄱ. 같은 스레드끼리는 상호배타적이지 않음

ㄴ. 다른 스레드가 접근했을 때는, spin(5000번). 시간 초과나면 CRASH

 

2. Read lock

ㄱ. 같은 스레드는 Write lock을 획득한 상태에서 Read lock 획득 가능. 다른 스레드는 불가

ㄴ. Write lock을 획득한 스레드가 없다면(lock을 소유한 스레드가 없다면) 다른 스레드들도 경합 없이 Read lock을 획득할 수 있음(lock을 소유한 스레드가 있다면, 소유하지 않을 때까지 spin)

ㄷ. Read lock을 획득한 상태에서는 Write lock이 획득될 수 없음(읽기 동작 중엔 쓰기가 안 됨)

 

3. 궁금한 점

ㄱ. 동일한 스레드가 공유 자원에 Write lock을 복수로 획득하고 쓰기 동작을 하는 게 문제가 전혀 안 생기는 건가요? 아니면 문제 생길 수도 있는 것을 고려하여 사용해야 하는 걸까요.

ㄴ. 동일 스레드는 Write lock을 획득한 상태에서 Read lock을 획득할 수 있는 것은 싱글 스레드 기준 쓰기/읽기 동작이 동시에 일어날 수 없기 때문일까요?

감사합니다.

windows-server MMORPG network

답변 1

1

Rookiss

ㄱ.
이건 RW락 구현 정책에 따라 다른데
강의에서 구현한 버전에서는 동일 쓰레드가 연속적으로 Write->Write->Write 락을 연속해서
잡을 수 있고 아무 문제가 없습니다.
컨텐츠 개발할 때 이렇게 구현하는게 더 편하기 때문인데
이미 만든 Lock 잡는 함수에서 다른 Lock잡는 함수를 호출할 수도 있기 때문입니다.
다만 모든 라이브러리가 그렇진 않고 프로젝트에서 사용하기 전에 여러 정책을 확인을 해봐야 합니다.
(Write -> Read 되는지, 락 중첩 여부 등등)

ㄴ.
이 또한 정책에 따라 갈리는데 강의에서 구현한 RW락에서는
동일 쓰레드가 Write Lock을 잡은 상태라면,
다른 쓰레드는 얼씬도 못하는 상태이고 상호배타적 특성이 보장되기에
Read도 통과시켜준 것에 불과합니다.
다만 대부분 RW락 라이브러리에서는 Write->Read를 지원하지 않거나,
다른 특수 함수를 이용해야 하는 경우가 더 많습니다.

0

literate_t

답변 감사합니다🙏

writeLock을 잡을때 꼭 empty 상태여야하는 이유?

0

63

2

Memory Pool에서 오버플로우 질문입니다.

0

94

2

포토폴리오 및 진로 관련하여 고민입니다.

0

172

1

포토폴리오 관련 고민입니다.

0

91

1

실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.

0

107

2

성능 테스트 결과

0

117

2

게임 서버 Stateful, Stateless 진로 고민

0

147

1

WaitOnAddress와 Sleep의 차이 질문

0

98

1

궁금한거 있습니다.

0

92

2

JobTimer 구동 스레드

0

116

2

TryPop() 동작 관련 질문

0

86

1

로드맵 C#서버 C++서버 방향성 질문

0

162

2

스레드 id를 출력할떄 메인스레드 id도 출력되나요?

0

81

1

생명주기를 위한 의도적 복사

0

94

2

락프리의 실무에서 사용 질문

0

154

2

32bit threadID와 16비트 상위 WriteFlag에 대해

0

109

2

mutex와 sleep 차이점

0

133

1

실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다

0

167

2

Stomp Allocator의 Release함수에 대한 질문입니다.

0

102

1

공부법 관련해서

0

190

2

MakeShared 함수 관련

0

119

1

지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.

0

152

2

운영체제관련 질문입니다

0

144

1

send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.

0

125

2