CS 기초 · 중급
뮤텍스와 세마포어는 동기화 메커니즘으로 사용됩니다. 두 메커니즘의 주요 차이점을 설명하고, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 예시를 들어 설명해주세요.
힌트 · 뮤텍스는 상호 배제를 위한 잠금 메커니즘이며, 세마포어는 리소스에 대한 접근을 제어하는 카운팅 메커니즘입니다. 각각 단일 리소스와 다중 리소스 접근 제어에 활용됩니다.
상호 배제소유 가능성카운팅리소스 관리프로세스/스레드 동기화
모범답안
뮤텍스와 세마포어는 둘 다 동기화 메커니즘이지만, 주요 차이점은 뮤텍스는 상호 배제를 위한 잠금 도구이고, 세마포어는 리소스 접근을 제어하는 카운터라는 점입니다.
뮤텍스는 특정 시점에 하나의 스레드만 공유 자원에 접근하도록 보장합니다. 마치 화장실 문에 걸쇠를 거는 것과 같습니다. 한 사람이 들어가면 다른 사람은 기다려야 합니다. 주로 단일 리소스에 대한 접근을 제어할 때 사용됩니다. 예를 들어, 공유 변수를 갱신하는 스레드 간의 충돌을 방지하는 데 유용합니다.
반면, 세마포어는 동시에 접근할 수 있는 리소스의 수를 제한합니다. 주차장과 비슷하다고 생각하면 됩니다. 주차 공간이 10개인 주차장은 세마포어 값이 10인 세마포어로 표현할 수 있습니다. 주로 다중 리소스에 대한 접근을 제어할 때 사용됩니다. 예를 들어, 데이터베이스 연결 풀에서 동시에 사용할 수 있는 연결 수를 제한하는 데 사용할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 동시성 / 멀티스레딩 면접 질문
- 경쟁 조건을 방지하기 위해 사용되는 '임계 영역(Critical Section)'의 개념을 설명하고, 왜 임계 영역 설정이 중요한지 이야기해 주세요.
- 동기화 메커니즘으로 사용되는 '뮤텍스(Mutex)'와 '세마포어(Semaphore)'의 개념을 정의하고, 이 둘의 주요 차이점은 무엇인지 설명해 주세요.
- '데드락(Deadlock)'이란 무엇이며, 데드락이 발생하기 위한 4가지 필수 조건을 설명해 주세요.
- 멀티스레드 환경에서 발생할 수 있는 Race Condition(경쟁 상태)이 무엇인지 정의하고, 이러한 문제를 방지하기 위한 대표적인 방법들을 설명해주세요. 실제 코드에서 Race Condition이 발생하는 시나리오를 예시로 들어 설명할 수 있다면 더욱 좋습니다.
- 교착 상태(Deadlock)는 멀티스레드 애플리케이션에서 심각한 문제를 야기할 수 있습니다. 교착 상태의 4가지 필요조건을 설명하고, 이를 해결하거나 예방하기 위한 실용적인 방법들을 제시해주세요.
- 특정 언어(예: Java, C#)에서 `volatile` 키워드가 멀티스레딩 환경에서 어떤 역할을 하는지 설명해주세요. `volatile`이 보장하는 것과 보장하지 못하는 것을 구분하여 설명하고, `synchronized` 또는 `Atomic` 클래스와의 차이점을 언급해주세요.