| 순서 — self-lock 은 스탬프가 보이기 전에 잡히고 되돌려질 수 없게 된 뒤에 풀린다 |
삭제자가 스탬프를 새기기 전에 자기 MVCCID 를 X 로 쥐고, 커밋까지 놓지 않는다 (15번) |
스탬프는 보이는데 붙잡을 self-lock 이 없는 창 — 대기 없는 미커밋 덧쓰기 |
대기 함수의 no-op 승인 단정 (debug 빌드) |
| 귀속 — 문장 끝에 반납되는 요청은 전부 이 문장이 잡은 것이다 |
표시할 때 셈 < count 가드가 앞선 문장의 요청을 제외하고, 반납은 가장 바깥 문장만 한다 (14번) |
앞선 문장의 요청이 대신 풀린다 |
반납 루프의 n <= count 단정 (가드와 별개) · shell 스위트 |
| 유지 — 트랜잭션을 끝내지 않고 스탬프를 되돌리는 기전은 행 락을 유지한다 |
savepoint·MERGE 는 문장 끝을 선언하지 못하고 (16번), 실패한 문장은 셈만 지운다 (15번) |
대기자가 홀더이므로 부분 롤백 뒤 주인과 서로를 기다린다 |
데드락 검출기 · savepoint 시나리오 |
| 소유자 유일 — self-lock 이 서 있는 동안 자기 스탬프 행의 논리적 유일 변경자는 소유자다 |
다른 writer 는 스탬프를 만나 self-lock 에 먼저 정착한다 (15번) — 그래서 소유자는 자기 행에 행 락을 잡지 않는다 (14번) |
정착 지점을 지나지 않은 writer 가 소유자의 미커밋 변경 위에 덧쓴다 |
갱신 경로의 락 보유 단정 — "내가 삽입하지 않은 버전이면 락을 쥐고 있어야 한다" (debug 빌드) · 재접촉 시나리오 |