CS 기초 · 기초
동기화 메커니즘으로 사용되는 '뮤텍스(Mutex)'와 '세마포어(Semaphore)'의 개념을 정의하고, 이 둘의 주요 차이점은 무엇인지 설명해 주세요.
힌트 · 뮤텍스는 상호 배제를 위한 잠금 메커니즘이며, 세마포어는 여러 개의 자원에 대한 접근을 제어할 수 있는 카운터 기반 메커니즘입니다.
상호 배제소유 가능카운팅 세마포어바이너리 세마포어자원 접근 제어
모범답안
뮤텍스와 세마포어는 모두 동기화 메커니즘이지만, 목적과 동작 방식에 차이가 있습니다.
뮤텍스는 상호 배제(Mutual Exclusion)를 위한 잠금 도구입니다. 특정 시점에 단 하나의 스레드만 공유 자원에 접근하도록 보장합니다. 뮤텍스는 '소유' 개념이 있어서, 잠금을 획득한 스레드만이 잠금을 해제할 수 있습니다.
반면, 세마포어는 여러 개의 자원에 대한 접근을 제어하는 데 사용됩니다. 세마포어는 내부적으로 카운터를 가지고 있으며, 이 카운터 값을 통해 접근 가능한 자원의 수를 나타냅니다. 스레드가 자원을 사용하려면 세마포어 값을 감소시키고, 사용이 끝나면 값을 증가시킵니다. 세마포어는 뮤텍스와 달리 잠금을 획득한 스레드가 반드시 잠금을 해제할 필요는 없습니다. 다른 스레드가 해제할 수도 있습니다.
주요 차이점은 뮤텍스는 하나의 스레드만 접근 가능한 자원에 사용되고, 소유 개념이 있다는 점입니다. 세마포어는 여러 개의 자원에 대한 접근을 제어하며, 소유 개념이 없습니다. 세마포어는 카운터 값을 통해 접근 가능한 자원 수를 관리합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 동시성 / 멀티스레딩 면접 질문
- 멀티스레딩(Multithreading)이란 무엇이며, 멀티스레딩을 사용할 때 얻을 수 있는 장점과 발생할 수 있는 단점은 무엇인지 설명해 주세요.
- 멀티스레딩 환경에서 발생할 수 있는 '경쟁 조건(Race Condition)'이란 무엇이며, 어떤 상황에서 발생할 수 있는지 구체적인 예를 들어 설명해 주세요.
- 경쟁 조건을 방지하기 위해 사용되는 '임계 영역(Critical Section)'의 개념을 설명하고, 왜 임계 영역 설정이 중요한지 이야기해 주세요.
- '데드락(Deadlock)'이란 무엇이며, 데드락이 발생하기 위한 4가지 필수 조건을 설명해 주세요.
- 뮤텍스와 세마포어는 동기화 메커니즘으로 사용됩니다. 두 메커니즘의 주요 차이점을 설명하고, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 예시를 들어 설명해주세요.
- 멀티스레드 환경에서 발생할 수 있는 Race Condition(경쟁 상태)이 무엇인지 정의하고, 이러한 문제를 방지하기 위한 대표적인 방법들을 설명해주세요. 실제 코드에서 Race Condition이 발생하는 시나리오를 예시로 들어 설명할 수 있다면 더욱 좋습니다.