shared resource에 대한 접근 패턴은 read/write 두 가지로 나뉜다. 따라서, read/write에 다 mutual exclusion을 하는 것은 퍼포먼스를 떨어뜨릴 수 있다.그래서 Reader's Lock과 Writer's Lock을 나누는 것이다.
1. Reader's Lock = Shared Lock
: Reader가 임계 구역에 들어가서 락을 걸면, 같은 Reader는 들어갈 수 있지만 Writer는 들어올 수 없다.
2. Writer's Lock = Exclusive Lock
: Writer's Lock을 걸면 다른 쓰레드(프로세스)가 들어올 수 없다.
starvation은 unfair & indefinite waiting을 의미한다.
위에서 말한 Reader's Lock과 Writer's Lock을 쓰는 경우, shared resource를 reader가 점유하고 있을 때 Reader는 꼬리를 물고 계속 들어올 수 있다. 그렇기 때문에 Writer는 언제까지 기다려야할 수 없고, 자원 점유에 대한 빈부격차가 커지게 된다.
기아 상태를 해결하는 방법에는 Aging이 있다. Aging은 Reader's Lock을 수정하여 Reader가 자원을 점유한 상태에서 Writer가 이를 기다리고 있다면, 더 이상 다른 Reader가 들어갈 수 없도록 수정하는 것이다.
그러나 Startvation 문제는 해결하지 않는 경우 쓸 데 없는 정지를 멈춰서 더 효율성이 좋기도 하다.