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

Reader-Writer 문제

Reader-Writer 문제

여러 Reader는 동시 읽기 가능하지만 Writer는 독점 접근이 필요한 동기화 문제로, 읽기 성능과 쓰기 공정성을 균형있게 해결하기 위해 세마포어와 카운터를 활용

목적: 동시 읽기 허용, 쓰기 독점, 동기화 학습, 성능-공정성 트레이드오프

특징: 다중 Reader, 독점 Writer, 기아 가능, 우선순위 정책

동기화 요구사항

  • 여러 Reader 동시 읽기 가능
  • Writer는 독점 접근(다른 Reader/Writer 없어야 함)
  • Writer 쓰기 중 Reader/Writer 접근 불가

세마포어/변수

  • rw_mutex(1): Writer 상호 배제, Reader도 첫/마지막만 사용
  • mutex(1): read_count 보호
  • read_count(0): 현재 Reader 수

Reader 로직: P(mutex) → read_count++ → if(read_count==1) P(rw_mutex) → V(mutex) → 읽기 → P(mutex) → read_count-- → if(read_count==0) V(rw_mutex) → V(mutex)

Writer 로직: P(rw_mutex) → 쓰기 → V(rw_mutex)

문제점

  • Reader 우선(First Solution): Reader 계속 오면 Writer 기아
  • Writer 우선(Second Solution): Writer 우대, Reader 기아 가능

공정 해결: 타임스탬프, 큐, 순서 보장

적용사례: 데이터베이스(Read-Write Lock), 캐시, 공유 자료구조, 파일 시스템

비교: Reader-Writer(읽기다중/쓰기독점) vs Mutex(완전독점) vs RCU(읽기무잠금)

연관: 세마포어, 동기화, 기아, Read-Write Lock, 데이터베이스