RDBS并发控制习题

并发控制习题

本篇文章记录了第21次作业


1、设T1、T2、T3是如下的三个事务,设A的初值为0。

  T1: A:=A+2;
  T2: A=A*2;
  T3: A=A**2;  (即A←A²)

(1) 若这三个事务允许并发执行,则有多少种可能的正确结果?请一一列举出来。

解答:若是串行执行的话共有3!种执行顺序,即T1 T2 T3、T1 T3 T2、T2 T1 T3、T2 T3 T1、T3 T1 T2和T3 T2 T1,这些顺序对应的执行结果是16、8、4、2、4、2。故并发执行的结果只可能是2、4、8、16。

(2) 请给出一个可串行化的调度,并给出执行结果。

解答:以T1 T2 T3为例

T1 T2 T3
Slock A
Y=R(A)=0
Unlock A
Xlock A
 
A=Y+2=2
W(A)
Unlock A
 
 
 
 
 
 
 
 
 
 
Slock A
Wait
Wait
Wait
Y=A=2
Unlock A
Xlock A 

A=Y*2=4
W(A)
Unlock A
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Slock A
Wait
Wait
Wait
Y=A=4
Unlock A
Xlock A
A=Y**2=16
W(A)
Unlock A
(3) 请给出一个非串行化的调度,并给出执行结果。

解答:
RDBS并发控制习题_第1张图片

(4) 若这三个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。

解答:
RDBS并发控制习题_第2张图片

(5) 若这三个事务都遵守两段锁协议,请给出一个产生死锁的调度。

解答:
RDBS并发控制习题_第3张图片

2、今有三个事务的一个调度 r3(B)r1(A)w3(B)r2(B)r2(A)w2(B)r1(B)w1(A),该调度是冲突可串行化的调度吗?为什么?

解答:我们可以根据“若一个调度是冲突可串行化,则一定是可串行化的调度”这一方法来判断。
这里很明显,r1(A)夹在r3(B)和w3B中间,所以我们可以向后将其调换到r1(B)和w1(A)中间,这样顺序就变成了了T3 →T2→ T1。也就是说他是冲突串行化调度。

3、考虑T1和T2两个事物。

 T1: R(A);R(B);B=A+B;W(B) T2:R(B);R(A);A=A+B;W(A)

(1) 改写T1和T2,增加加锁操作和解锁操作,并要求遵循两阶段封锁协议。

解答:
T1: Slock A; R(A); Slock b; R(B); B=A+B;Xlock B; W(B); Unlock A; Unlock B;
T2: Slock B; R(B); Slock A; R(A); A=A+B;Xlock A; W(A); Unlock B; Unlock A.

(2) 说明T1和T2的执行是否会引起死锁,给出T1和T2的一个调度并说明之。

解答:会。下面给出例子。
RDBS并发控制习题_第4张图片


以下是这门课的学习感想

 数据库的理论课程在这一周就算是上完了,接下来就是实验课了。
 话说这还是第一次在网上上完整整一个学期的课,确实是一种新奇的体验。我觉得网课形式有利有弊,比如说我听到老师提示的重难点的时候,我的注意力可能比较集中,但多讲一会儿后注意力就可能会发散到旁边的手机或者电脑上的浏览器上了www,有的时候头天晚上睡觉睡的比较晚第二天可能上着上着就睡着了。但好在网课多半是有回放的,如果在哪里走神了可以看回放来回顾老师上课讲的知识。那么你可能就会问了,上课的时候就走神,看回放岂不是更走神?这就要说到老师让我们写的作业了,也就是在CSDN上记录学习过程。为了能够更好地记录学习过程,我一般都会在写之前再把老师的视频快速再过一遍,遇到之前没听的地方就会放慢速度多次观看。虽然说这样的时间效率比较低,但是比起传统课程,没有听懂的地方就需要你在网上查找相关资料,或者是问同学,总之更浪费时间,而且还不一定能够搞懂。
 那么这门课我学会了多少呢?我盘算着,大部分的东西应该都学会了,感觉可能有问题的就是Trigger&写存储过程,以及最后这几节课有些上的不太认真。现在摆在我面前的难题就是写一个包含数据库基本功能的窗体应用。嘛,因为之前没有接触过C#,但也学过C和C++,所以不能够说是从零学起吧,但愿我能够完成这一应用。
 之前看到《纽约时报》有一篇文章是说疫情是否能改变高等教育的教学方式,我认为一定程度上是的。虽然现在的网课存在效率较低,互动缺乏(David老师布置的作业我认为是一种很成功的互动)等缺点,但是因为疫情的原因,网课第一次在全国乃至是全球范围内大规模应用,让老师和学生们一起体会到了现代科技的便利。总有一些尝到甜头的人会尝试着再去体验这个模式,那么网课对于这些个人来说就是一种更受欢迎的学习方式,也就是说会有一定的市场。这样网课便会在我们的生活中越发普遍起来,人们对它的抵触感也会越来越少,某种意义上确实改变了教育的形式。


以下是自己的一些碎碎念

 当我敲下这些文字的时候,电脑上的时间显示是2020年5月17日22:21:39,距离原定的截止时间已经过了21分钟。看到老师在群里面的总结的时候,我不禁松了一口气:作业统计截止了啊。很难受说明白那是怎样的心情,失落?轻松?亦或者是懊恼?
 在CSDN上写写博客记录学习的过程,是老师为了让我们弥补实验课因疫情停开而出的主意,这样可以在一定程度上多多练习sql而不是上完课之后就将其抛在脑后。对我个人来说,好处还是十分明显的。在最初,我也是抱着很大的热情来做这件事的,不仅仅是因为这关系到我的平时成绩,更是因为我也有这样的想法,想将学习记录下来。因为我是一个重度拖延症患者,每次写博客都拖到了星期天,也就是作业统计的最后一天。一开始还好,学的东西不多嘛,随便写写就能写完。第一次感到吃力是我某一次的文章花了几乎半天的时间写完,从中午一直写,写到了晚上(因为新学的知识记的不牢,又回看了一遍老师的讲课视频)。再回头一看,其实字数也不是很多:7k的markdown字数,HTML字数只有4千多字。可能是第一次写这种长文章,所以话的时间比较多也是可以理解的,我这样想。但是过不了多久,我又有一篇文章超过了时间。我意识到,这样不行。所以我每次都想着星期六应该提前写。但这么多次,我最多也就是做到了星期六提前看看这星期学的内容。但这个时候,我还是很愿意去写这些东西的。
 松懈下来是在中期的某个时候,那一周因为上一周的作业延迟到这一周验收,于是很自然的,拖延症患者的我也把它延迟到了那一周。最后我需要在那一周的周日写上4篇博客。可能你会觉得我一周写两篇都做不到,有什么勇气去挑战一周4篇呢?嘛,一方面原因是老师说后两篇需要写的内容很少,一方面就是拖延症患者对于自己的实力有着非常不清楚的认识,常常会产生错误的判断。于是那一天,我写到了第二天的7点钟,吃了个早饭就开始上周一早上的数据库课程。当然,讲课讲到一半我就睡着了。前几次老师对于我的延期行为都原谅了,但是这次文章多,他没有原谅我,告诉我延期就是要接受处罚。对于这个处罚我也没有异议,说实话我很感激头几次老师原谅了我,只是我不争气罢了。从那时候开始我知道了我要是像之前那样写的话(也就是跟着书把所有的概念都过一遍),那么我是写不完的。为什么不提前写呢?也是呢,明明可以提前写,明明周六基本上都是有空的,但是为什么宁愿周六躺在床上看着刷了不知道多少遍都还没有再更新的那些新闻都不愿意写呢?说实话,我也不知道。但是这种情况真的是持续了好久好久了,久到我都不知道有多久了(笑。可能从小学的时候就开始了吧。然后从那周开始,我写的东西就基本上都是混了。诚然,这样的确大大缩减了写博客的时间,但是我也变得不愿意写博客了。因为这和我写博客的初衷又不符了,成了单纯的应付差事。所以人就是这样矛盾的生物。
 在这一周,也就是13周,我们的数据库理论课结课了,那么除了实验课相关的内容,这也应该是最后一次作业了。明明要做的事情像山那样多,我还是拖啊,拖啊,这样一直拖到了21:00,这才开始慌起来。本想着作业简单很快能搞定,再一看好多知识点又忘了,没办法转头看书。于是这第21次作业,也就是这一系列的句号,也成了一个残破的句号。我现在的心态是什么样的呢?就如开头说的那样,很复杂。一次次的像这样搞砸,这已经在我的人生中重复了无数遍。顺带一提在高中这样搞砸一次的后果是我从高一某个时段起,除了考试就基本没有写过数学作业,最后高考数学就考了110多分。同时我也把这种后果带进了大学,因为数学不行弄得我计算机学的很痛苦。这种恶性循环我真是受够了,我如此想到。但现实是我从来未曾跳出这一大坑,反而是越陷越深。该怎么办呢?以后再想罢,对自己是不抱有希望了。

你可能感兴趣的:(RDBS并发控制习题)