운영체제 락 개념과 동기화 기법 (Mutex, RLock, RWLock, 스핀락, 세마포어 비교 요약 정리)

2025. 2. 26. 12:25정보기술/운영체제 (OS)

🔍 Mutex, RLock, RWLock, 스핀락, 세마포어 비교 요약 정리

운영체제(OS)에서 멀티스레딩 동기화 기법으로 사용되는 뮤텍스(Mutex), 재진입 가능 락(RLock), 읽기-쓰기 락(RWLock), 스핀락(Spinlock), 세마포어(Semaphore) 의 차이를 정리했습니다.


1. 개념 요약

동기화 기법 개념  특징 사용 예시
Mutex (뮤텍스) 하나의 스레드만 임계 영역 접근 가능 다른 스레드는 Lock이 해제될 때까지 대기 (Blocking) 단순한 공유 자원 보호
RLock (재진입 가능 락) 같은 스레드가 여러 번 Lock 가능 Lock 획득 횟수만큼 Unlock 필요 재귀 호출, OOP에서 동일 객체 내 여러 메서드 사용
RWLock (읽기-쓰기 락) 여러 개의 스레드가 동시에 읽기 가능, 쓰기는 단일 스레드만 가능 읽기와 쓰기 작업을 분리하여 성능 향상 읽기 작업이 많은 환경 (DB 캐시, 파일 읽기)
Spinlock (스핀락) Lock이 해제될 때까지 계속 CPU를 사용하며 대기 Busy-Waiting, 빠른 Lock 해제 시 유리 커널 락, 짧은 Lock 유지가 필요한 경우
Semaphore (세마포어) N개의 스레드가 동시에 접근 가능 Lock 개수를 조절 가능 (카운팅 기능) 네트워크 연결, 리소스 제한

2. 동작 방식 비교

동기화 기법 Lock 동작 방식 Unlock 방식 주요 특징
Mutex 한 번에 하나의 스레드만 Lock 가능 Lock을 획득한 스레드만 Unlock 가능 일반적인 동기화 기법
RLock 같은 스레드가 여러 번 Lock 가능 획득한 Lock 개수만큼 Unlock 호출 필요 재귀 함수 및 객체 지향 프로그래밍에 적합
RWLock 여러 개의 스레드가 읽기(Read) Lock 가능, 쓰기(Write) Lock은 단 하나만 가능 읽기/쓰기 각각 해제 필요 읽기 작업이 많은 경우 성능 향상
Spinlock Lock이 해제될 때까지 Busy-Waiting Lock 해제 즉시 다음 스레드가 획득 빠른 Lock 해제에 적합, CPU 자원 낭비 가능
Semaphore N개의 스레드가 접근 가능 (sem_wait) sem_post를 호출하면 다른 스레드가 접근 가능 동시 접근 제한 가능

3. 성능 및 사용 사례

동기화 기법 장점  단점  추천 사용 사례
Mutex 단순하고 직관적, 기본적인 동기화 제공 한 번에 하나의 스레드만 접근 가능 → 성능 저하 가능 공유 변수 보호, 임계 영역 관리
RLock 같은 스레드가 여러 번 Lock 가능 Unlock을 여러 번 호출해야 해제됨 재귀 함수, 클래스 기반 멀티스레딩
RWLock 읽기 병렬 처리 가능 → 성능 향상 쓰기 작업이 많으면 성능 저하 데이터베이스 읽기, 로그 시스템
Spinlock 빠른 Lock 해제 시 효과적, 커널 락에 적합 Lock 대기 중에도 CPU 사용 → 과부하 발생 가능 커널 락, 짧은 Lock 유지가 필요한 경우
Semaphore 여러 개의 스레드가 동시에 접근 가능, 리소스 제한 가능 Count 값 설정이 어려울 수 있음 네트워크 연결 동기화, 생산자-소비자 문제

4. 언제 사용해야 할까?

사용 목적 추천 동기화 기법
단순한 공유 자원 보호 Mutex
같은 스레드가 여러 번 Lock을 획득해야 함 RLock
읽기 작업이 많고, 쓰기 작업이 적은 경우 RWLock
빠르게 Lock을 획득/해제해야 함 Spinlock
일정 개수의 스레드만 접근 가능하도록 제한해야 함 Semaphore

5. Mutex, Spinlock, Semaphore 차이점 요약

기법  동작 방식 CPU 사용 방식 주요 용도
Mutex Lock이 해제될 때까지 대기 (Blocking Wait) CPU 사용 안 함 단일 스레드 보호
Spinlock Lock이 해제될 때까지 반복 확인 (Busy-Waiting) CPU 사용 (낭비 가능) 짧은 Lock 유지가 필요한 경우
Semaphore Count만큼 스레드가 동시에 접근 가능 CPU 사용 안 함 동시 접근 제한

🔹 결론

  • Mutex는 기본적인 동기화 기법으로, 하나의 스레드만 자원에 접근 가능.
  • RLock은 같은 스레드가 여러 번 Lock을 획득해야 할 때 사용.
  • RWLock은 읽기 작업이 많은 환경에서 성능을 최적화.
  • Spinlock은 빠른 Lock 해제가 필요하지만 CPU 낭비를 감수해야 할 때 사용.
  • Semaphore는 동시 접근을 제한해야 할 때 유용.