토픽 31 / 85·프로세스 동기화와 교착상태
Producer-Consumer 문제
Producer-Consumer 문제
생산자(Producer)가 데이터를 생성하여 버퍼에 넣고 소비자(Consumer)가 버퍼에서 데이터를 꺼내는 동기화 문제로, 유한 버퍼에서 경쟁 상태와 버퍼 오버플로/언더플로를 세마포어로 해결
목적: 동기화 학습, 세마포어 활용, 버퍼 관리, 생산-소비 패턴 구현
특징: 유한 버퍼, 경쟁 상태, 세마포어 3개, 상호 배제, 동기화
구성요소: 공유 버퍼(크기 N), 생산자 스레드, 소비자 스레드
동기화 문제: 버퍼 가득(생산자 대기), 버퍼 비어있음(소비자 대기), 경쟁 상태(동시 접근)
세마포어 3개
- •empty(N): 빈 슬롯 수, 생산자가 P(empty)
- •full(0): 찬 슬롯 수, 소비자가 P(full)
- •mutex(1): 버퍼 상호 배제
생산자 로직: P(empty) → P(mutex) → 버퍼에 삽입 → V(mutex) → V(full)
소비자 로직: P(full) → P(mutex) → 버퍼에서 제거 → V(mutex) → V(empty)
순서 중요: empty/full 먼저, mutex 나중(데드락 방지)
변형: 무한 버퍼(empty 불필요), 다중 생산자/소비자, 우선순위
장점: 동기화 학습, 세마포어 이해, 실용적 패턴
단점: 데드락 가능(순서 잘못), 복잡도, 성능 오버헤드
적용사례: 메시지 큐, 이벤트 루프, 파이프라인, 멀티스레드 프로그램, 로그 처리
비교: Producer-Consumer(버퍼) vs Reader-Writer(공유 데이터) vs Dining Philosophers(자원 순환)
연관: 세마포어, 동기화, 뮤텍스, 버퍼, 멀티스레딩