C세션이 Exclusive Lock을 얻으려고 기다리고 있는 상태에서 Shared Lock을 획득하려 하면, 앞의 C세션을 무시하고 D세션 또한 Shared Lock을 얻게 되는 걸까요??
Enqueue Lock 작동 메커니즘
- A 세션이 Shared 모드로 Lock 획득한다.
- B 세션이 Shared 모드로 Lock을 획득하려고 한다. 먼저 Lock을 소유한 A 세션과 호환되므로 정상적으로 Lock을 획득한다. 이제 소유자 목록에는 두 개 세션이 달려 있다.
- C 세션이 Exclusive 모드로 Lock을 획득하려고 한다. Shared 모드와 Exclusive 모드 간에 호환성이 없으므로 대기자 목록에 자신을 등록하고 대기한다.
- 소유자 목록에 Shared 모드로 달려 있던 A, B 두 세션이 모두 Lock을 해제하면 C 세션이 Exclusive 모드로 소유자 목록에 등록된다.
- A 세션이 Exclusive 모드로 다시 Lock을 획득하려고 하면, Exclusive 모드와 호환되지 않으므로 대기자 목록에 자신을 등록하고 대기한다.
- B 세션이 다시 Shared 모드로 Lock을 획득하려고 할 때도 Exclusive 모드와 호환되지 않으므로 대기자 목록에 자신을 등록하고 대기한다.
- Enqueue Lock은 순서가 보장되므로 C 세션이 Lock을 해제하면 A 세션이 가장 먼저 Exclusive 모드로 Lock을 획득한다.
- 의문) 3번과 4번 사이에 D 세션이 Shared 모드 Lock을 획득하려고 한다면 어떻게 될까?
이런 건 실제 코딩해서 알아봐 개발세계엔 실제랑 이론이랑 라이브러리구현이랑 다른 거 많아
너가 아무리 이론을 안다고 해도 실제랑 틀리면 모르는 거야