읽기는 공유하고 쓰기는 독점한다

같은 자료구조라도 읽기와 쓰기의 위험이 다르므로, 입장 규칙은 현재 독자 수와 대기 중인 저자 여부를 함께 본다.

R1R2R3 동시 읽기
공유 데이터 read_count = 3
W1 read_count = 0까지 대기
reader

저자가 없으면 함께 진입

읽기는 상태를 바꾸지 않으므로 여러 독자가 같은 공유 락을 동시에 잡을 수 있다.

writer

독자가 0명이 될 때까지 대기

쓰기는 데이터를 바꾸므로 모든 독자와 다른 저자가 빠진 뒤 배타 락을 얻는다.

release

마지막 독자가 문을 연다

read_count가 0이 되는 순간 대기 중인 저자가 쓰기 락을 획득할 수 있다.

독자 우선

처리량은 높지만 독자가 계속 오면 저자가 오래 밀릴 수 있다.

저자 우선

대기 중인 저자가 있으면 새 독자를 막아 쓰기 기아를 줄인다.

공정 큐

도착 순서를 보존해 어느 쪽도 무기한 기다리지 않게 만든다.