동기화의 문제들
Bounded-Buffer Problem
- N개의 Item을 저장할 수 있는 제한된 크기의 버퍼(Buffer)
- 여러 생산자(Producer)와 여러 소비자(Consumer)가 접근
- 생산자 : 하나의 Item을 버퍼에 저장 → write
- Item을 생성합니다.
- Buffer에 빈 공간을 확인
- 빈 공간이 있다면 Item 저장
- 소비자 : 버퍼에서 하나의 Item을 가져옴 → write
- Buffer가 비어 있지 않은지 확인합니다.
- Item이 있다면 Buffer에서 Item을 가져옵니다.
- Item을 처리합니다.
- Item이 없다면 Buffer에 Item이 추가될 때까지 대기

- Race Condition
- 여러 Producer가 동시에 Buffer에 Item을 저장
- Buffer 상태 관리
- Buffer가 Full → Producer는 대기해야 합니다.
- Buffer가 Empty → Consumer는 대기해야 합니다.
구현
- Buffer : 1차원 배열로 구현
- boolean buffer[n] = empty;
- 생산자
- buffer 중 empty인 걸 찾아 full로 바꿈
- buffer[m] = full;
- 소비자
- buffer 중 full인 걸 찾아 empty로 바꿈
- buffer[m] = empty;
Semaphore 구현
- Empty : buffer 내 진입할 공간 표시
- Full : buffer 내 아이템 존재 표시
- Mutex : buffer 에 대한 접근 관리
- 초기값
- Full = 0; Empty = n; Mutex =1;