ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

并发控制

2021-11-09 20:03:51  阅读:165  来源: 互联网

标签:数据项 控制 事务 加锁 false 并发 Tj Ti


可恢复调度

对于每对事务Ti和Tj,如果Tj读取了之前由Ti所写的数据项,则Ti先于Tj提交。

无级联调度

对于每对事务Ti和Tj,如果Tj读取了先前由Ti所写的数据项,则Ti必须在Tj这一读操作前提交。

定义:令{T0,T1,.....,Tn}是参与调度S的一个事务集,如果存在数据项Q,使得Ti在Q上持有A型锁,后来,Tj在Q上持有B型锁,且comp(A,B)=false,则我们称在S中Ti先于(precede)Tj,记为Ti->Tj。如果Ti->Tj,这一居先意味着在任何等价的串行调度中,Ti必须出现在Tj之前。指令之间的冲突对应于锁类型之间的不相容性。

如果调度S是那些遵从封锁协议规则的事务集的可能调度之一,我们称调度S在给定的封锁协议下是合法的(legal)。当且仅当其所有合法的调度为冲突可串行化时,我们称一个封锁协议保证冲突可串行性;换句话说,对于任何合法的调度,其关联的关系是无环的。

两阶段锁

要求每个事务分两个阶段提出加锁和解锁申请。

  1. 增长阶段(growing phase):事务可以获得锁,但不能释放锁。
  2. 缩减阶段(shrinking phase):事务可以释放锁,但不能获得新锁。

缺点:依旧存在级联回滚

严格两阶段封锁协议(strict two-phase locking protocol)

要求事务所有的排他锁必须在事务提交后方可释放,避免级联回滚

强两阶段封锁协议(rigorous two-phase locking protocol)

要求事务提交之前不得释放任何锁。

树形协议(tree protocol)

要求所有的数据项集合D={d1,d2,...,dn}满足偏序->:如果di->dj,则任何既访问di对访问dj的事务必须先访问di,然后访问dj。这种偏序可以是数据的逻辑或物理组织的结果,也可以只是为了并发控制而加上的。

  1. Ti第一个加锁可以对任何数据项进行。
  2. 此后,Ti对数据项Q加锁的前提是Ti当前持有Q的父项上的锁。
  3. 对数据项解锁可以随时进行。
  4. 数据项被Ti加锁并解锁后,Ti不能再对该数据项加锁。

不保证可恢复性和无级联回滚。为了保证可恢复性和无级联回滚,可以将协议修改为在事务结束前不允许释放排他锁。直到事务结束前一直持股排他锁降低了并发性。

这里有一个提高并发性的替代方案,但它只保证可恢复性:为每一个发生了未提交写操作的数据项,我们记录是哪个事务最后对它执行了操作,当事务Ti执行了对未提交数据项的读操作,我们就在最后对该数据项执行了写操作的事务上记录一个Ti的提交依赖(commit dependency),在有Ti依赖的所有事务提交完成之前,Ti不能提交。如果其中一个事务中止,Ti也必须中止。

多粒度锁

IS IX S SIX X
IS true true true true false
IX true true false false false
S true false true false false
SIX true false false false false
X false false false flase false

对数据项Q加锁规则:

  1. 事务Ti必须遵从锁类型相容函数
  2. 事务Ti第一次封锁树的根结点,并且可以加任意类型的锁
  3. 仅当Ti当前对Q的父节点具有IX或IS锁时,Ti对结点Q可加S或者IS锁
  4. 仅当Ti当前对Q的父节点具有IX或SIX锁时,Ti对结点Q可加X、SIX或者IX锁
  5. 仅当Ti未曾对任何节点解锁时,Ti可对结点加锁(也就是说,Ti是两阶段的)
  6. 仅当Ti当前不持有Q的子节点的锁时,Ti可对节点Q解锁

多粒度协议要求加锁自顶向下的顺序(根到叶),而锁的释放则按自底向上的顺序(叶到根)

标签:数据项,控制,事务,加锁,false,并发,Tj,Ti
来源: https://www.cnblogs.com/quehualin/p/15530589.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有