뮤텍스 (Mutex) 와 세마포어 (Semaphore) 는 멀티스레딩 및 병렬 프로그래밍에서 사용되는 동기화 도구로, 자원 접근 시 발생할 수 있는 경쟁 상태(race condition)를 방지하는 데 사용됩니다.
1. 뮤텍스(Mutex)란?
뮤텍스(Mutual Exclusion)는 상호 배제를 뜻하는 동기화 도구로, 한번에 단 하나의 스레드만 공유 자원에 접근할 수 있도록 보장합니다.
- 바이너리 락(Binary lock)의 형태를 가짐.
- 락을 소유한 스레드만 해제 가능.
- 주로 임계 구역(Critical Section) 보호에 사용됨.
2. 세마포어(Semaphore)란?
세마포어는 카운팅 기반의 동기화 도구로, 특정 개수의 스레드가 자원에 접근할 수 있도록 허용하는 방식입니다.
- 자원의 허용 개수를 지정하여 관리.
- 허용 개수를 초과하는 접근을 차단하여 동시 접근 제한.
- 바이너리 세마포어(자원 개수가 1)와 카운팅 세마포어(자원 개수 > 1)로 나뉨.
3. 뮤텍스와 세마포어의 차이점
| 목적 | 상호 배제 (한 번에 한 스레드 접근) | 동시 접근 제어 (여러 스레드 접근 가능) |
| 소유권 | 락을 소유한 스레드가 직접 해제 | 소유 개념이 없어 다른 스레드가 해제 가능 |
| 초기 값 | 0 또는 1 (바이너리) | 0 이상 정수 (카운팅 가능) |
| 용도 | 임계 구역 보호 | 자원 접근 관리 및 제한 |
4. 사용 예시
4-1. 뮤텍스 예시
- 데이터베이스 접속 시 동시에 접근하는 것을 방지하기 위해 사용.
- 파일 접근 시 하나의 스레드만 읽고 쓰기 가능.
4-2. 세마포어 예시
- 데이터베이스 풀(DB Connection Pool)을 제한된 개수만큼 운영.
- 네트워크 연결이나 리소스를 제한된 개수의 스레드만 이용하도록 관리.
5. 마무리
뮤텍스와 세마포어는 멀티스레딩 환경에서의 경쟁 상태를 방지하고 자원 접근을 효율적으로 관리하는 중요한 도구입니다. 각각의 특성과 차이점을 잘 이해하여 상황에 맞게 적절한 도구를 선택하여 사용할 수 있어야 합니다.