Semaphore와 Mutex, 동시성 제어의 핵심 도구
운영체제에서 동시성(Concurrency)은 여러 프로세스나 스레드가 CPU를 번갈아 사용하며 실행되는 환경을 의미합니다. 이때 공유 자원(Shared Resource)을 동시에 접근하게 되면 경쟁 상태(Race Condition)가 발생할 수 있는데요. 이를 해결하기 위해 사용하는 대표적인 도구가 바로 Semaphore와 Mutex입니다.
핵심 개념 요약
항목 | Semaphore (세마포어) | Mutex (뮤텍스) |
---|---|---|
목적 | 자원 개수 제어 | 임계 구역 보호 |
값의 범위 | 0 이상 (N ≥ 1) | 0 또는 1 |
소유 개념 | 없음 | 소유한 스레드만 unlock 가능 |
사용 예시 | 제한된 리소스 관리 (ex. DB 커넥션) | 공유 변수 보호 |
구현 방식 | wait() / signal() |
lock() / unlock() |
Semaphore / Mutex 깊이 들어가기
- Semaphore는 카운팅 세마포어와 바이너리 세마포어로 나뉜다.
- 카운팅 세마포어는 동시에 접근 가능한 자원의 개수를 관리한다.
- 바이너리 세마포어는 사실상 Mutex와 유사하게 동작한다.
- Mutex 는 스레드 간 상호 배제를 보장하며, 일반적으로 한 번에 하나의 스레드만 임계 구역에 진입할 수 있도록 보장한다.
간단한 코드 비교
// Mutex 예시
pthread_mutex_t lock;
pthread_mutex_lock(&lock); // 공유 자원 접근 시 락 걸기
/* 공유 자원 사용 */
pthread_mutex_unlock(&lock); // 사용 후 락 풀기
// Semaphore 예시
sem_t sem;
sem_wait(&sem); // 공유 자원 획득
/* 공유 자원 사용 */
sem_post(&sem); // 공유 자원 반환
요약 정리
- Mutex는 1개의 리소스를 보호한다.
- Semaphore는 여러 개의 자원을 제어한다.
마치면서
Semaphore와 Mutex는 운영체제의 동시성 제어에서 빠질 수 없는 핵심 개념입니다. 비슷해 보이지만 용도와 동작 방식에 차이가 있기 때문에 상황에 따라 적절한 선택을 하는 것이 중요하지요. 두 개념의 차이를 이해하는 순간, 동시성 제어는 더 이상 추상적인 개념이 아니게 됩니다.
'크래프톤 정글 > CS기초(키워드, 개념정리)' 카테고리의 다른 글
[CS기초] Deadlock(데드락) (0) | 2025.05.09 |
---|---|
[CS기초] Race Condition, 동시성 버그의 핵심 원인 (0) | 2025.05.09 |
[CS기초] CPU Scheduling 알고리즘 핵심 정리 (0) | 2025.05.09 |
[CS기초] Process와 Thread 핵심 정리 (0) | 2025.05.09 |
[중간정리] 8주차 - HTTP, 파일 디스크립터, TCP/UDP, C언어(포인터) (0) | 2025.05.06 |