两阶段锁定协议 2PL,全称Two-Phase Locking Protocol。这个协议可以保证冲突可串行化 conflict serializability 但是不可以保证避免死锁 freedom from deadlock
两阶段锁定要求:对于每一个事务Transaction,分为两个阶段
第一阶段:增长阶段(Growing Phase)
在这个阶段,事务可以获得锁定,但不能释放锁定。事务可以继续请求并获得锁定,直到它达到了其锁定点(Lock Point),也就是事务获得最后一个锁定的时间点。一旦事务进入第二阶段,它就不能再获得新的锁定。
第二阶段:缩减阶段(Shrinking Phase)
在这个阶段,事务可以释放已经持有的锁定,但不能再获取新的锁定。这个阶段的目的是确保事务不会在已经进入第二阶段后再次请求锁定
在两阶段锁定协议中,存在级联回滚(Cascading Rollback)的可能性。为了避免级联回滚,可以采用一种更严格的协议,称为“严格两阶段锁定”(Strict Two-Phase Locking)。在严格两阶段锁定中,事务必须保持其所有独占锁(Exclusive Locks)(lock_X)直到事务提交或回滚。
此外,还有一个更严格的两阶段锁定协议,称为 rigorous Two-Phase Locking。在这个协议中,事务必须保持其所有独占锁(lock_X)以及共享锁(lock_S)直到事务提交或回滚。