READ WRITE LOCK

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

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

reader

저자가 없으면 함께 진입

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

writer

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

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

release

마지막 독자가 문을 연다

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

독자 우선

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

저자 우선

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

공정 큐

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