Game Programming/자문자답

크리티컬 섹션이란 무엇인가?

Doanie 2022. 9. 14. 00:09

크리티컬 섹션이란 무엇인가?


크리티컬 섹션(Critical Section)이란?

임계구역으로 한 순간에 하나의 쓰레드만 접근이 요구되는 공유 자원(Code, Data, Heap)에 접근하는 코드 영역을 말한다.

위와 같이 공유자원이 한번에 한 쓰레드만 요구를 하는 상황에서 여러개의 쓰레드가 그 공유 자원에 접근을 한다면 문제가 생길 것이다. 이 문제 해결을 위해 뮤텍스세마포어라는 방법이 있다.


뮤텍스(Mutex)는 무엇인가?

Mutual Exclusion(상호배제)의 약자로 쓰레드의 동시 접근을 허용하지 않는다는 의미이다. 즉, 어떤 한 쓰레드가 한 공유자원을 먼저 접근을 했다면 잠김상태가 되어 다른 쓰레드의 접근을 허용하지 않는 느낌이다.


세마포어(Semaphore)는 무엇인가?

뮤텍스는 한개의 쓰레드만 실행이 가능하지만 세마포어는 지정된 수 만큼의 쓰레드가 실행될 수 있도록 하는 것을 의미한다. 즉, 한개가 될수도 있기 때문에 뮤텍스도 세마포어 안에 속할 수 있지만 같은 개념은 아니다. 세마포어는 또한 데드락 문제를 해결한다.


데드락(Deadlock)은 무엇인가?

교착상태, 운영체제에서 시스템 자원에 대한 요구가 뒤엉킨 상태를 말한다. 즉, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 의미한다. 상호배제가 원인이 되기도 한다.


크리티컬섹션은 쓰레드에 공유되는 자원부분이며 이곳에서 문제가 발생 시 뮤텍스라는 방법으로 제한을 둬서 해결이 가능하나 이것은 데드락이라는 현상을 불를 수 있고 이것을 피하기 위해서는 세마포어 방법을 사용해야한다.