크리티컬 섹션이란 무엇인가?
크리티컬 섹션(Critical Section)이란?
임계구역으로 한 순간에 하나의 쓰레드만 접근이 요구되는 공유 자원(Code, Data, Heap)에 접근하는 코드 영역을 말한다.
위와 같이 공유자원이 한번에 한 쓰레드만 요구를 하는 상황에서 여러개의 쓰레드가 그 공유 자원에 접근을 한다면 문제가 생길 것이다. 이 문제 해결을 위해 뮤텍스와 세마포어라는 방법이 있다.
뮤텍스(Mutex)는 무엇인가?
Mutual Exclusion(상호배제)의 약자로 쓰레드의 동시 접근을 허용하지 않는다는 의미이다. 즉, 어떤 한 쓰레드가 한 공유자원을 먼저 접근을 했다면 잠김상태가 되어 다른 쓰레드의 접근을 허용하지 않는 느낌이다.
세마포어(Semaphore)는 무엇인가?
뮤텍스는 한개의 쓰레드만 실행이 가능하지만 세마포어는 지정된 수 만큼의 쓰레드가 실행될 수 있도록 하는 것을 의미한다. 즉, 한개가 될수도 있기 때문에 뮤텍스도 세마포어 안에 속할 수 있지만 같은 개념은 아니다. 세마포어는 또한 데드락 문제를 해결한다.
데드락(Deadlock)은 무엇인가?
교착상태, 운영체제에서 시스템 자원에 대한 요구가 뒤엉킨 상태를 말한다. 즉, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 의미한다. 상호배제가 원인이 되기도 한다.
크리티컬섹션은 쓰레드에 공유되는 자원부분이며 이곳에서 문제가 발생 시 뮤텍스라는 방법으로 제한을 둬서 해결이 가능하나 이것은 데드락이라는 현상을 불를 수 있고 이것을 피하기 위해서는 세마포어 방법을 사용해야한다.
'Game Programming > 자문자답' 카테고리의 다른 글
STL 벡터와 리스트의 차이는 무엇인가? (0) | 2022.10.09 |
---|---|
참조 카운트란 무엇인가? (0) | 2022.09.15 |
렌더링 파이프라인이란 무엇인가? (0) | 2022.09.13 |
가비지 컬렉터와 스마트 포인터란 무엇인가? (2) | 2022.09.13 |
캐릭터 구현 시 상속을 통해서만 구현해야하는가? (0) | 2022.09.12 |