若系统中存在n个等待事务T
i
(i=0,1,2,…,n-1),其中:T
0
正等待被T
1
锁住的数据项A
1
,T
1
正等待被T
2
锁住的数据项A
2
,…,T
i
正等待被T
i+1
锁住的数据项A
i+1
,…,T
n-1
正等待被T
0
锁住的数据项A
0
,则系统处于___________状态。
【正确答案】
B
【答案解析】解析:本题考查关系数据库事务处理方面的基础知识。 与操作系统一样,封锁的方法可能引起活锁和死锁。例如事务T
1
封锁了数据R,事务T
2
请求封锁R,于是T
2
等待。T
3
也请求封锁R,当T
1
释放了R上的封锁之后系统首先批准了T
3
的请求,T
2
仍然等待。然后T
4
又请求封锁R,当T
3
释放R上的封锁后系统又批准了T
4
的请求,……。T
2
有可能长期等待,这就是活锁。避免活锁的简单方法是采用先来先服务的策略。即让封锁子系统按请求封锁的先后次序对事务排队。数据尺上的锁一旦释放就批准申请队列中的第一个事务获得锁。 又如事务T
1
封锁了数据R
1
,T
2
封锁了数据R
2
,T
3
封锁了数据R
3
。然后T
1
又请求封锁R
2
,T
2
请求封锁R
3
,T
3
请求封锁R
1
。于是出现T
1
等待T
2
释放R
2
上的封锁,T
2
等待T
3
释放R
3
上的封锁,T
3
等待T
1
释放R
1
上的封锁。这就使得三个事务永远不能结束。即多个事务都请求封锁别的事务已封锁的数据,导致无法运行下去的现象称为死锁。