(转)两阶段封锁协议
2009-10-23 14:04
一、两段锁协议的内容
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不遵守两段协议。
并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串
行化的。
所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。事务遵守两段锁协议
是可串行化调度的充分条件,而不是必要条件。可串行化的调度中,不一定所有事务
都必须符合两段锁协议。
二、两段锁协议与防止死锁的一次封锁法
一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执
行,因此一次封锁法遵守两段锁协议,但是两段锁协议并不要求事务必须一次将所有
要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。
三、两段锁协议与三级封锁协议
两类不同目的的协议
两段锁协议:保证并发调度的正确性
三级封锁协议:在不同程度上保证数据一致性
遵守第三级封锁协议必然遵守两段协议
转自:/yxdh/computer/sjk/htm/8.6.htm
(另外参考/u2/70714/showart_1004098.html)
相关概念转自/jsjlw/20090312/822521_1.html的:
封锁通常具有3个环节:第一个环节是申请加锁,即事务在操作前要对它将使用的数据提出加锁申请;第二个环节是获得锁,即当条件成熟时,系统答应事务对数据进行加锁,从而事务获得数据的控制权;第三个环节是释放锁,即完成操作后事务放弃数据的控制权。
基本的封锁类型有以下两种:
排它锁X
排它锁也称为独占锁或写锁。一旦事务T对数据对象A加上排它锁,则只答应T 读取和修改A,其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。
共享锁S
共享锁又称读锁。假如事务T对数据对象A加上共享锁,其他事务只能再对A 加S锁,不能加X锁,直到事务T释放A上的S锁为止。
在对数据进行加锁时,另外需要约定并执行一些规则和协议,其中包括何时申请锁,保持锁的时间以及何时释放等,这些规则就称为封锁协议,其总共分为以下三级:
一级封锁协议。一级封锁协议是事务T在修改数据之前必须先对其加X锁,直到事务结束才释放。
二级封锁协议。二级封锁协议是事务T对要修改数据必须先加X锁,直到事务结束才释放X锁;对要读取的数据必须先加S锁,读完后即可释放S锁。
三级封锁协议。三级封锁协议是事务T在读取数据之前必须先对其加S锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所有锁。
执行了封锁协议之后,就可以克服数据库操作中的数据不一致所引起的问题。
不加锁的并发控制
/html/DatabaseProject/DbManagement/20080402/1026. html
时间戳相关/ky/wl/200906251041221819.htm