Two-phase locking
- 一种 悲观 (pessimistic) 的并发控制协议,用来确保事务执行时的隔离性(Isolation)。
- 保证结果是 Conflict Serializable 的(即等价于串行执行)。
Lock 类型
- S-lock (shared lock): 允许多个事务同时读取同一数据。
- X-lock (exclusive lock): 仅允许一个事务写入(或读写)数据。
兼容表:
|
S-lock |
X-lock |
| S |
✅ |
❌ |
| X |
❌ |
❌ |
- 一个事务要把某个数据项的锁从 Shared (S) 升级到 Exclusive (X),必须等待所有其他事务先释放它们的 S 锁
Phase 1 – Growing Phase
- 事务可以 获得锁 (acquire) 或 升级锁 (upgrade)。
- 但不能释放任何锁。
Phase 2 – Shrinking Phase
- 事务可以 释放锁 (release) 或 降级锁 (downgrade)。
- 但不能再获得新的锁。
2PL 的变种
Strict 2PL
- 所有 X-lock(写锁)在事务 commit 或 rollback 前都不释放。
- 无级联回滚 (no cascading aborts)。
- 调度为 Conflict Serializable + cascadeless + recoverable。