数据库的两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁
1.扩展阶段
在对任何数据项的读、写之前,要申请并获得该数据项的封锁。
2.收缩阶段
每个事务中,所有的封锁请求必须先于解锁请求。
例如:事务T遵循两段锁协议,其封锁协议为:
BEGIN TRANSACTION;
LOCK(A);READ A; A := A + 100; WRITE A; LOCK(B); UNLOCK(A); READ(B), UNLOCK(B),;
COMMIT;
可以证明:若并发执行的所有事务均遵守两段锁协议,则对这些并行事务的任何并行调度策略都是可串行化
需要说明的是,并发执行的所有事务若均遵守两段锁协议,只是这些事务的并行调度策略能可串行化的充分条件,不是必要条件。
两段锁协议与防止死锁的一次封锁法的区别:
一次封锁法要求事务必须一次对所有要使用到的数据项进行加锁,否则不能继续运行。
显然,一次封锁法符合两段锁协议,但是两段锁协议并不要求一次就要对所有需要用到的数据项进行加锁,因此遵守两段锁协议的事务有可能死锁