inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

ReaderWriterLock 구현 연습

재귀적 락 허용

571

(게임학전공)장지현

작성한 질문수 6

1

재귀적 락을 허용 하지 않았을때 ReaderWriterLock은

 

Write할때 Read가 같이 일어나면 Write하기 전에 있던 데이터와, Write한 후의 데이터가 공존해서 Read해가기 때문에, ReaderWriterLock을 사용 하는거 같은데(Read만 해갈때는 문제 없어서 Read는 공용으로 가능)

어떤 경우에 재귀적 락을 허용하는지 잘 모르겠습니다.

재귀적 락을 허용했을때는 한 쓰레드가 여러개의 데이터를 write,read할때 사용 되는건가요?

network unity C#

답변 1

5

Rookiss

재귀적 락은 동일한 쓰레드에서 연속해서 Lock을 잡는 경우를 케어해주는겁니다.

컨텐츠를 만들다 보면 함수가 아주 많아지고,
특정 함수가 다른 함수를 호출하는 경우가 빈번한데요.
함수->함수->함수 이렇게 타고 들어가다 보면 정신을 못차리게 됩니다.
그런데 멀티쓰레드라면 이 함수들에서 Lock을 잡아야 
쓰레드 사이의 상호배타적 특성이 보장되겠죠.

만약 재귀적 락을 허용하지 않는 경우라면,
Lock을 잡는 버전의 함수에선 절대로 또 Lock을 잡는 함수를 중첩해서 호출하면 안 됩니다.
가령 저는 예전에 첫 포폴을 만들 때는
함수마다 ~Locked 이름을 붙여서 Lock을 잡는 함수인지 아닌지를 구별을 하곤 했습니다.
(ex. EnterRoomLocked, EnterRoom)

이렇게 구분해서 Locked 계열 함수에선
절대 Locked 계열 함수를 또 호출하면 안 된다!를 스스로 기억하면 되지만
실수의 여지가 많고 무척 귀찮은 일이 될겁니다.
만약 중첩 락을 허용하게 코드를 작업해주면,
이런 부분을 신경쓰지 않고 이미 만들어진 함수에서 다른 함수를 자유롭게 호출이 가능해집니다.


0

(게임학전공)장지현

 아하 이해했습니다! 감사합니다!

TLS 질문드립니다.

0

43

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

46

2

Unity Span

0

75

2

XML, Dll 차이점

0

105

2

Session 질문입니다

0

79

1

Write Read 커서 키워드

0

74

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

70

2

네트워크 Send 전담 스레드 배치

0

98

2

UnhandledException 으로 서버 터지는 경우

0

85

2

컨텐츠 단, 엔진 단

0

104

1

질문 있습니다

0

77

2

C# 게임서버 3D MMORPG

0

144

2

유니티6 버전

0

97

2

receive하는 부분과 send하는 부분의 차이

0

133

2

커서의 위치의 중요성

0

103

2

C++ 전혀 모르는데 C# 서버

0

169

2

강의에 질문이 있습니다

0

86

2

멀티스레드 이해도 질문

0

95

1

500 vs 500

0

128

3

OnAcceptHandler 액션 함수

0

61

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

189

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

82

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

105

1

스핀락 질문.

0

110

2