CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  软件培训/认证/考试 >  软件水平考试

高分求解:超强的必考的难题,等待ing.....

楼主yefengdn(我爱我家)2004-11-03 22:17:39 在 软件培训/认证/考试 / 软件水平考试 提问

如下图所示,给出的是一个调度的事件序列。该调度包含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

相关问题

  • 难题!!!!求解?
  • 难题求解!!!
  • 难题求解
  • 求解难题!!!!
  • 难题求解
  • 在线等待COM高手:200分求解一COM的难题!
  • SQL难题求解?
  • 求解一算法难题!
  • 难题!~~求解决方法~
  • 求解,在线等待!

关键词

  • 修改
  • 数据
  • 分析
  • 数据库
  • 操作系统
  • 解决
  • 事务
  • 死锁
  • 等待
  • diaoni

得分解答快速导航

  • 帖主:yefengdn
  • congcat
  • shiyi0927
  • Jacky1206
  • airballer
  • youyiwuyi
  • diaoni
  • diaoni
  • diaoni
  • risky2003
  • diaoni

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo