两阶段封锁
一、两段锁协议的内容1. 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
2. 在释放一个封锁之后,事务不再获得任何其他封锁。
“两段”锁的含义
事务分为两个阶段:
第一阶段是获得封锁,也称为扩展阶段;
第二阶段是释放封锁,也称为收缩阶段。
例:
事务1的封锁序列:
Slock A ... Slock B ... Xlock C ... Unlock B ... Unlock A ... Unlock C;
事务2的封锁序列:
Slock A ... Unlock A ... Slock B ... Xlock C ... Unlock C ... Unlock B;
事务1遵守两段锁协议,而事务2不遵守两段协议。
并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串
行化的。
所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。事务遵守两段锁协议
是可串行化调度的充分条件,而不是必要条件。可串行化的调度中,不一定所有事务
都必须符合两段锁协议。
二、两段锁协议与防止死锁的一次封锁法一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执
行,因此一次封锁法遵守两段锁协议,但是两段锁协议并不要求事务必须一次将所有
要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。
三、两段锁协议与三级封锁协议两类不同目的的协议
两段锁协议:保证并发调度的正确性
三级封锁协议:在不同程度上保证数据一致性
遵守第三级封锁协议必然遵守两段协议