뮤텍스(Mutex)와 세마포어(Semaphore)의 차이
한 줄 답변
뮤텍스는 단일 스레드의 상호 배제를 보장하며 락 소유권이 있습니다. 반면 세마포어는 카운터를 통해 다중 스레드의 자원 접근 및 실행 순서를 제어합니다.
핵심 개념 정리
동시성 프로그래밍에서 여러 스레드가 공유 자원에 안전하게 접근하도록 보장하는 것은 시스템 안정성의 핵심입니다. 이를 위해 운영체제는 임계 영역(Critical Section)을 보호하는 다양한 동기화 메커니즘을 제공하며, 대표적으로 스핀락(Spinlock), 뮤텍스(Mutex), 세마포어(Semaphore)가 있습니다.
스핀락은 임계 영역이 사용 중일 때 스레드가 CPU를 점유한 상태로 락이 풀릴 때까지 무한 루프를 돌며 대기(Busy Waiting)하는 방식입니다. 문맥 교환(Context Switching) 비용이 발생하지 않기 때문에, 임계 영역이 매우 짧은 경우 뮤텍스보다 더 높은 성능을 발휘합니다. 하지만 락을 오래 유지하면 CPU 자원을 심각하게 낭비할 수 있어 단일 코어 환경에서는 사용을 지양해야 합니다.
반면 뮤텍스와 세마포어는 락을 획득하지 못한 스레드를 대기 큐(Wait Queue)에 넣고 수면(Sleep) 상태로 전환합니다. 뮤텍스는 단 하나의 스레드만 접근을 허용하는 이진 세마포어와 유사하지만, 락을 획득한 스레드만이 락을 해제할 수 있다는 고유한 소유권(Ownership) 개념을 가집니다. 반면 세마포어는 설정된 카운트만큼 여러 스레드의 동시 접근을 허용하며, 락을 획득하지 않은 스레드도 시그널을 통해 세마포어를 해제할 수 있어 실행 순서 제어(Signaling)에 자주 활용됩니다.
비교 정리
| 항목 | 뮤텍스 (Mutex) | 세마포어 (Semaphore) |
|---|---|---|
| 자원 접근 개수 | 오직 1개의 스레드만 접근 가능 | 카운터 값에 따라 여러 스레드 접근 가능 |
| 소유권 (Ownership) | 락을 획득한 스레드만 해제 가능 (소유권 O) | 다른 스레드에서도 시그널을 통해 해제 가능 (소유권 X) |
| 주요 사용 목적 | 공유 자원에 대한 상호 배제 (Mutual Exclusion) | 프로세스 간 실행 순서 동기화 및 자원 풀링 (Signaling) |
| 우선순위 역전 해결 | 우선순위 상속(Priority Inheritance) 기법 적용 가능 | 소유권이 없어 우선순위 상속 기법 적용 불가 |
면접에서 이렇게 답하세요
시니어 면접에서는 단순한 개념 정의를 넘어, 실무적인 락(Lock) 선택 전략을 어필해야 합니다. 예를 들어 '임계 영역이 짧고 문맥 교환 오버헤드가 더 큰 경우 스핀락을, 파일 I/O 등 긴 작업이 포함된 경우 뮤텍스를 사용합니다'와 같이 트레이드오프를 설명하세요. 추가로 뮤텍스의 우선순위 상속(Priority Inheritance) 메커니즘을 곁들이면 OS 동작 원리에 대한 깊은 이해도를 증명할 수 있습니다.
자주 묻는 추가 질문
Q. 이진 세마포어(Binary Semaphore)와 뮤텍스의 차이점은 무엇인가요?
동작 방식은 유사하지만 가장 큰 차이는 '소유권'입니다. 뮤텍스는 락을 건 스레드만 풀 수 있지만, 이진 세마포어는 다른 스레드가 시그널을 보내 해제할 수 있습니다.
Q. 우선순위 역전(Priority Inversion) 현상이란 무엇이며 어떻게 해결하나요?
낮은 우선순위 스레드가 락을 쥐고 있어 높은 우선순위 스레드가 블로킹되는 현상입니다. 뮤텍스에서는 낮은 스레드의 우선순위를 임시로 높이는 우선순위 상속으로 해결합니다.
Q. 스핀락(Spinlock)은 어떤 상황에서 사용하는 것이 적합한가요?
멀티 코어 환경에서 임계 영역에서의 작업 시간이 스레드의 문맥 교환(Context Switching)에 걸리는 시간보다 짧다고 확실히 보장될 때 사용하는 것이 효율적입니다.
커뮤니티 하이라이트
“단순히 CS 지식을 묻는 게 아니라, DB 커넥션 풀을 구현할 때 왜 세마포어를 쓰는지 묻는 실무 질문으로 자주 발전합니다.”
“분산 환경에서의 락(Distributed Lock) 개념인 Redis의 Redlock 등과 엮어서 대답했더니 면접관 반응이 굉장히 좋았습니다.”
42명의 개발자가 이 질문에 참여했습니다
관련 면접 질문
앱에서 직접 답변해보세요
매일 3개의 면접 질문에 답변하고,
다른 개발자들의 답변을 비교해보세요.