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

leomessi님의 프로필 이미지
leomessi

작성한 질문수

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

ReaderWriterLock

Monitor 방식과 SpinLock 등 방법들의 관계

작성

·

305

1

lock 키워드와 Monitor는 임계 영역 자체를 만드는 방법에 대한 것이고,

SpinLock, Context Switching, Event는 임계 영역을 사용하기 위한 순서를 결정하는 알고리즘이라고 생각해도 되나요?

그리고 Context Switching은 실행중인 스레드가 대기 상태로 돌아가고, 대기중이던 스레드를 실행하기 위해 메모리에 스레드의 상태를 저장 및 적재하는 일련의 과정이라고 말씀해주셨는데요, Context Switching을 사용하여 Lock을 구현하는 방법을 이르는 용어가 따로 있는지 궁금합니다.

답변 2

2

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

lock 키워드와 Monitor는 임계 영역 자체를 만드는 방법에 대한 것이고,
-> lock은 C# 표준에서 제공하는 락 기능입니다.
상호배타적 특성을 갖고 있지만 내부적으로 어떻게 만들어졌는지 문서화된 바는 없습니다.
(이것은 컴파일러에 따라 다를 수 있겠죠)

SpinLock, Context Switching, Event는 임계 영역을 사용하기 위한 순서를 결정하는 알고리즘이라고 생각해도 되나요?
-> 락의 상호배타적 특성을 구현하는 방법이 여러가지가 있는데,
스핀락은 '루프를 돌면서 계속 점유를 시도하는' 방법을 채택하는 락을 말합니다.
유저레벨에서 루프를 돌지 않을거라면,
이벤트 방식으로 원하는 상황이 왔을 때
신호를 받는 방법으로도 만들 수 있는데,
이를 위해 커널에서 제공하는 Event를 사용하는 것입니다.
Event는 운영체제에서 지원하는 일종의 '통신 도구'이지
딱히 락에 종속적인 개념은 아닙니다.
물론 알고리즘 또한 아니며, 단순히 커널 레벨에 존재하는 어떤 객체 (커널 오브젝트) 입니다.
이를 이용해서 특정 상황에 시그널을 주고 받을 수 있습니다.

Context Switching은 쓰레드끼리 교환이 일어날 때,
기존 쓰레드의 정보를 저장하고 깨울 쓰레드의 정보를 복원하는 일련의 과정을 말하며
락을 쓰지 않더라도 늘상 발생하고 있는 자연스러운 현상입니다.
따라서 [CS, Event가 임계 영역을 사용하기 위한 순서를 결정하는 알고리즘]은 살짝
의미가 다를 수 있습니다.

그리고 Context Switching은 실행중인 스레드가 대기 상태로 돌아가고, 대기중이던 스레드를 실행하기 위해 메모리에 스레드의 상태를 저장 및 적재하는 일련의 과정이라고 말씀해주셨는데요, Context Switching을 사용하여 Lock을 구현하는 방법을 이르는 용어가 따로 있는지 궁금합니다.

-> [Context Switching을 사용하며] Lock을 구현하는 것은 아니고,
단지 불필요하게 유저레벨에서 체크하지 않도록
잠시 소유권을 커널에 내주는 것입니다.
Context Switching 자체로는 Lock에 도움을 주는 것이 아니기에
당연히 [CS를 사용하여 Lock을 구현하는 방법]이라는 용어도 없습니다.

0

leomessi님의 프로필 이미지
leomessi
질문자

헷갈렸던 개념들이 좀 정리된 것 같습니다. 감사합니다.

leomessi님의 프로필 이미지
leomessi

작성한 질문수

질문하기