两阶段锁
在数据库和事务处理中,两阶段锁 (Two-phase locking,2PL) 是一种保证冲突可串行化的悲观并发控制方法。[1][2]它也是数据库事务调度 (历史记录) 的结果集的名称。该协议使用事务对数据应用的锁,这可能会阻止 (解释为停止信号) 其他事务在事务生命周期内访问同一数据。
根据两阶段锁(2PL)协议,锁的应用和解除分为两个阶段:
- 扩展阶段:在此阶段中,锁被获取,且不释放任何锁。
- 收缩阶段:在此阶段中,锁被释放,且不再获取任何锁。
基本协议中使用两种类型的锁:共享锁和独占锁。对基本协议的改进可能会使用更多类型的锁。由于使用了阻塞进程的锁,2PL、S2PL 和 SS2PL 可能会因两个或多个事务的相互阻塞而导致死锁。
参考文献
- ^ Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (1987): Concurrency Control and Recovery in Database Systems (页面存档备份,存于互联网档案馆), Addison Wesley Publishing Company, ISBN 0-201-10715-5
- ^ Gerhard Weikum, Gottfried Vossen (2001): Transactional Information Systems (页面存档备份,存于互联网档案馆), Elsevier, ISBN 1-55860-508-8