패스잇
CS 기초 · 중급

멀티스레드 환경에서 공유 자원에 대한 동시성 문제를 해결하기 위한 세마포어(Semaphore)와 뮤텍스(Mutex)의 차이점을 설명하고, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 시나리오를 제시해주세요.

힌트 · 뮤텍스는 이진 세마포어의 한 형태로, 주로 임계 구역 보호에 사용됩니다. 세마포어는 자원의 개수를 나타내는 카운터를 사용하여 여러 개의 자원에 대한 접근을 제어할 수 있습니다.

세마포어뮤텍스상호 배제카운팅 세마포어이진 세마포어

모범답안

세마포어와 뮤텍스는 모두 멀티스레드 환경에서 공유 자원에 대한 동시성 문제를 해결하기 위한 도구입니다. 가장 큰 차이점은 뮤텍스는 상호 배제(Mutual Exclusion)를 위한 잠금 메커니즘이고, 세마포어는 더 일반적인 신호 메커니즘이라는 점입니다.

뮤텍스는 특정 스레드만이 잠금을 해제할 수 있습니다. 즉, 한 스레드가 뮤텍스를 획득하면 다른 스레드는 해당 뮤텍스를 획득할 수 없고, 획득한 스레드만이 해제할 수 있습니다. 주로 임계 구역을 보호하여 단 하나의 스레드만 접근하도록 보장할 때 사용합니다. 예를 들어, 파일에 데이터를 쓰는 작업을 여러 스레드가 동시에 수행하지 않도록 할 때 뮤텍스를 사용할 수 있습니다.

세마포어는 자원의 개수를 나타내는 카운터를 가지고 있습니다. 이 카운터 값을 통해 여러 스레드가 동시에 자원에 접근할 수 있도록 제어합니다. 세마포어는 다른 스레드가 해제할 수 있으며, 카운팅 세마포어는 여러 개의 자원에 대한 접근을 제어할 때 유용합니다. 예를 들어, 데이터베이스 연결 풀에서 사용 가능한 연결 수를 제한할 때 세마포어를 사용하여 동시에 접속할 수 있는 스레드 수를 제어할 수 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 운영체제 면접 질문

← 운영체제 면접 질문 전체 보기