关于锁的一些常见问题

调度:

调度室数据库的一个或者多个事物按时间排序的序列

  

T1

T2

READ(A,t)

READ(A,s)

t := t + 100

s := s*2

WRITE(A,t)

WRITE(A,s)

READ(B,t)

READ(B,s)

t := t + 100

s := s*2

WRTIE(B,t)

WRITE(B,s)

串行化调度:

串行化是指调度的动作先是一个事物的所有动作,然后是另一个事物的所有动作

T1

T2

A

B

 

 

25

25

READ(A,t)

 

 

 

t := t + 100

 

 

 

WRITE(A,t)

 

125

 

READ(B,t)

 

 

 

t := t + 100

 

 

 

WRTIE(B,t)

 

 

125

 

READ(A,s)

 

 

 

s := s*2

 

 

 

WRITE(A,s)

250

 

 

READ(B,s)

 

 

 

s := s*2

 

 

 

WRITE(B,s)

 

250

可串行化:

对于一个事物集《1,2,3....,如果一个并发调度的结果于一个串行化调度的结果一样,就成这个调度是可串行化调度

T1

T2

A

B

 

 

25

25

READ(A,t)

 

 

 

t := t + 100

 

 

 

WRITE(A,t)

 

125

 

 

READ(A,s)

 

 

 

s := s*2

 

 

 

WRITE(A,s)

250

 

 

READ(B,s)

 

 

 

s := s*2

 

 

 

WRITE(B,s)

 

50

READ(B,t)

 

 

 

t := t + 100

 

 

 

WRTIE(B,t)

 

 

150

不是串行化调度

不可串行化调度分析:

两种情况:

( l )事务 Tl 写某个数据对象 T2读或写 A ;  ( 2 )事务 Tl 读或写某个数据对象 T2写  冲突可串行化:

s1,s2是一个调度d1的连续的两个操作,若s1,s2是属于不同的事物并且是不冲突的,则可以交换它们的顺序得到一个新的调度d2,称d1d2是等价的,如果调度D1经过一系列的非冲突交换变为d2,称d1,d2是冲突等价的,称d1是一个冲突可串行化调度。

两段锁协议

  

封锁序列

编辑本段概念

所谓两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁:   1. 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁,而且   2. 在释放一个封锁之后,事务不再申请和获得任何其他封锁。   所谓两段锁的含义是,事务分为两个阶段,第一阶段是获得封锁,也称为扩展阶段。这在阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这阶段,事务可以释放任何数据项上的任何类型的琐,但是不能再申请任何琐。   例如事务T1遵守两段锁协议,其封锁序列是:(如右  又如事务T2不遵守两段锁协议,其封锁序列是:   Slock A … Unlock A … Slock B … Xlock C … Unlock C 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值