Learning
토픽 25 / 85·프로세스 동기화와 교착상태

세마포어 (Semaphore)

세마포어 (Semaphore)

정수 카운터를 사용하여 공유 자원의 접근을 제어하는 동기화 기법으로, P(wait)와 V(signal) 연산을 통해 여러 프로세스/스레드의 접근을 조정

목적: 상호 배제, 자원 개수 제한, 순서 제어, 동기화

특징: 정수 카운터, P/V 원자적 연산, 소유권 없음, 블로킹

종류

  • 이진 세마포어(Binary): 0 또는 1, 뮤텍스와 유사
  • 계수 세마포어(Counting): 0 이상, 여러 자원 관리

연산

  • P(wait/down): 카운터 감소, 0 미만이면 블록 대기, 원자적
  • V(signal/up): 카운터 증가, 대기 프로세스 깨움, 원자적

동작: 초기값 S=n(자원 수) → P(S): S--; if(S<0) block → V(S): S++; if(S<=0) wakeup

소유권 없음: 어떤 프로세스도 V() 가능(뮤텍스와 차이)

장점: 여러 자원 관리, 순서 제어, 동기화 유연성

단점: 복잡한 사용, 데드락 가능, 우선순위 역전, 소유권 없음(실수 가능)

적용사례

  • Producer-Consumer(생산자-소비자)
  • Reader-Writer(읽기-쓰기)
  • Dining Philosophers(식사하는 철학자)
  • 공유 메모리 동기화
  • 자원 풀(DB 커넥션)

예시: Producer-Consumer - empty(N), full(0), mutex(1)

비교: 세마포어(카운터/소유권없음/범용) vs 뮤텍스(이진/소유권/단순)

연관: 뮤텍스, 동기화, Producer-Consumer, P/V 연산, 임계 구역