高分求解:超强的必考的难题,等待ing.....
如下图所示,给出的是一个调度的事件序列。该调度包含t1,t2,...,t12等12个事务,a,b,...,h为数据库中的数据项。假定“读i”(i=a,b,...h)成功,则获得i上的一个s锁,而“修改i”成功时,则将锁升级为x锁。又假定所有锁都保持到事务结束,那么,在时刻t36是否存在死锁?并分析哪些事务处于等待另一个事物的状态?
图:
时间 事务 操作
t1 t1 读a
t2 t2 读b
t3 t1 读c
t4 t4 读d
t5 t5 读a
t6 t2 读e
t7 t2 修改e
t8 t3 读f
t9 t2 读f
t10 t5 修改a
t11 t1 commit
t12 t6 读a
t13 t5 rollback
t14 t6 读c
t15 t6 修改c
t16 t7 读g
t17 t8 读h
t18 t9 读g
t19 t9 修改g
t20 t8 读e
t21 t7 commit
t22 t9 读h
t23 t3 读g
t24 t10 读a
t25 t9 修改h
t26 t6 commit
t27 t11 读c
t28 t12 读d
t29 t12 读c
t30 t2 修改f
t31 t11 修改c
t32 t12 读a
t33 t10 修改a
t34 t12 修改d
t35 t4 读g
t36
想了好久不清楚如何下手,那位高手分析分析,多谢啦!
如何判断“死锁”,判断“等待”?
问题点数:50、回复次数:23Top
1 楼congcat(网破鱼欢)回复于 2004-11-04 07:22:22 得分 2
我认为 只有 X 锁 才等待。也就是只要修改才等待!
我也看不明白!Top
2 楼shiyi0927(ho)回复于 2004-11-04 08:24:18 得分 2
这是什么考题啊?
这么难!?
不会是楼主骗人帮你解题吧!
不过我也挺感兴趣的!
有高手解决一下吧!Top
3 楼Jacky1206(胖胖,其实我不胖)回复于 2004-11-04 08:57:42 得分 2
应该是操作系统关于同步异步的问题,一般是画图解决,一步一步跟踪下去Top
4 楼yefengdn(我爱我家)回复于 2004-11-04 09:38:41 得分 0
是呀,是操作系统和数据库方面的题目,超难!
不清楚那位大师能解决呀?Top
5 楼airballer(airballer)回复于 2004-11-04 09:40:49 得分 2
以前出过的题还会考吗?我根本看都不看。知道《数据库原理及设计》P226讲的那些就够了Top
6 楼yefengdn(我爱我家)回复于 2004-11-04 09:50:55 得分 0
不能那样说,考试肯定有那样的题目!!
解不出题目,说明你对数据库还没有理解到那样的程度呀!特别是死锁那部分Top
7 楼yefengdn(我爱我家)回复于 2004-11-04 10:47:38 得分 0
upTop
8 楼youyiwuyi(有意无意)回复于 2004-11-04 11:10:31 得分 2
一步一步跟踪下去跟到34步考试时间已经到了!Top
9 楼yefengdn(我爱我家)回复于 2004-11-04 13:09:43 得分 0
upTop
10 楼diaoni(三条腿的废柴)回复于 2004-11-04 15:40:38 得分 2
根据题目,只有当一个事务t在一个数据d上加x锁,并且在t commit或rollback之前,有另一事务t2试图去修改d,t2才会被阻塞。所以在最后并没有死锁。
Top
11 楼diaoni(三条腿的废柴)回复于 2004-11-04 15:54:01 得分 0
弄错了,在想想Top
12 楼diaoni(三条腿的废柴)回复于 2004-11-04 16:13:24 得分 5
图去读或修改d,t2就会被阻塞。
在最后,以下为在数据上加了x锁但没有释放的事务,个分量依次表示加锁的时间,事务id,占有的资源:
(7,t2,e),(19,t9,g),(25,t9,h),(30,t2,f),(31,t11,c),(33,t10,a),(34,t12,d)
在等待的事务有:
(20,t8,e),(23,t3,g),(35,t4,g)
可以看到,占有资源的事务没有在等待的,而在等待的事务也没有是霸着资源没释放的,所以最后没有死锁。
Top
13 楼yefengdn(我爱我家)回复于 2004-11-04 16:37:14 得分 0
diaoni(女厕所) :
可是答案是有死锁的!
说说你的思路也行呀,谢先拉!Top
14 楼daironghua(绿如蓝)回复于 2004-11-04 18:25:07 得分 0
TO:diaoni(女厕所)
能否再讲明白点?哪些事物处于等待?是如何分析的?Top
15 楼wht5555(wht)回复于 2004-11-04 19:40:52 得分 0
TO:diaoni(女厕所) :
晕。说的清点好吗?Top
16 楼congcat(网破鱼欢)回复于 2004-11-04 19:52:07 得分 0
答案是什么呀??
你把答案说出来,想出来的人或许多点!
Top
17 楼diaoni(三条腿的废柴)回复于 2004-11-04 20:13:31 得分 2
我是这样想的:
当一个事务t在一个数据d上加x锁后,若在t commit或rollback之前,有另一事务t2试图去读或修改d,t2就会被阻塞。
Top
18 楼risky2003(准情人的关怀是像爱人人却是别人)回复于 2004-11-04 20:26:18 得分 2
T2死锁吧????Top
19 楼diaoni(三条腿的废柴)回复于 2004-11-04 21:26:58 得分 29
不好意思,刚才认真列了个表分析了一下,确实有死锁,分析如下:(这回应该不会再错了吧)
分析基于以下两点:
1.若一个事务t给一个数据d加了x锁,则在t commit或rollback之前,其他任何事务都不能对d执行任何操作。
2.一个事务t可以成功给一个数据d加x锁,当且仅当除了t外,没有任何其他事务拥有d的s锁或x锁。
然后从头一步步分析下来,则在最后可以得到:
在各个数据上拥有s锁或x锁的事务,以及在其上阻塞的事务列表如下,数据名称旁边的括号内为加在该数据上的锁:
拥有锁 阻塞/(时间,事务id)
a(s): t10,t12 (33,t10)
b(s): t2
c(s): t1,t11,t12 (31,t11)
d(s): t4,t12 (34,t12)
e(x): t2 (20,t8)
f(s): t3,t2 (30,t2)
g(x): t9 (23,t3),(35,t4)
h(s): t8,t9 (25,t9)
由此可以得到循环等待队列:
t9->t8->t2->t3->t9
所以发生死锁。
Top
20 楼prettyladys(我是一个勤奋的男生啊)回复于 2004-11-04 23:37:03 得分 0
操作系统 。我没学好啊。亏。现在也来不及了。Top
21 楼yefengdn(我爱我家)回复于 2004-11-05 10:40:57 得分 0
答案:t2,t3,t9,t8死琐;事务t4等待事务t9,事务t12等待事务t4,事务t11,t10等待事务t12Top
22 楼yellowlee()回复于 2004-11-05 11:42:59 得分 0
对,你说的对,
t9-->t8-->t2-->t3-->t9
我是这样理解的
t9 h(x) -->t8 h(s)-->t8 e(s)-->-->t2 e(x)-->t3 g(s)-->t9 g(x)Top
23 楼yellowlee()回复于 2004-11-05 11:44:30 得分 0
都结贴咯,昏Top




