当前位置:文档之家› 两阶段封锁协议

两阶段封锁协议

(转)两阶段封锁协议

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

相关主题