작성
·
473
답변 1
5
재귀적 락은 동일한 쓰레드에서 연속해서 Lock을 잡는 경우를 케어해주는겁니다.
컨텐츠를 만들다 보면 함수가 아주 많아지고,
특정 함수가 다른 함수를 호출하는 경우가 빈번한데요.
함수->함수->함수 이렇게 타고 들어가다 보면 정신을 못차리게 됩니다.
그런데 멀티쓰레드라면 이 함수들에서 Lock을 잡아야
쓰레드 사이의 상호배타적 특성이 보장되겠죠.
만약 재귀적 락을 허용하지 않는 경우라면,
Lock을 잡는 버전의 함수에선 절대로 또 Lock을 잡는 함수를 중첩해서 호출하면 안 됩니다.
가령 저는 예전에 첫 포폴을 만들 때는
함수마다 ~Locked 이름을 붙여서 Lock을 잡는 함수인지 아닌지를 구별을 하곤 했습니다.
(ex. EnterRoomLocked, EnterRoom)
이렇게 구분해서 Locked 계열 함수에선
절대 Locked 계열 함수를 또 호출하면 안 된다!를 스스로 기억하면 되지만
실수의 여지가 많고 무척 귀찮은 일이 될겁니다.
만약 중첩 락을 허용하게 코드를 작업해주면,
이런 부분을 신경쓰지 않고 이미 만들어진 함수에서 다른 함수를 자유롭게 호출이 가능해집니다.
아하 이해했습니다! 감사합니다!