单选题
若系统中存在一个等待事务集{T
0
,T
1
,T
2
,…,T
n
},其中T
0
正等待被T
1
锁住的数据项D
1
,T
1
正等待被T
2
锁住的数据项D
2
,…,T
n-1
正等待被T
n
锁住的数据项D
n
,T
n
正等待被T
0
锁住的数据项D
0
,则系统处于______的工作状态。
【正确答案】
B
【答案解析】[解析] 与操作系统中的进程调度相类似,若数据库系统中存在一个等待事务集{T
0
,T
1
,T
2
,…,T
n
},其中T
0
正等待被T
1
锁住的数据项D
1
,T
1
正等待被T
2
锁住的数据项D
2
,…,T
n-1
正等待被T
n
锁住的数据项D
n
,T
n
正等待被T
0
锁住的数据项D
0
,则系统处于死锁的工作状态。这是因为系统中两个或多个事务都已封锁了相关数据对象,而其他事务又请求对这些数据对象加锁,从而出现死等待。
通常,死锁的诊断方法有超时法和等待图法。其中,超时法是指一个事务的等待时间超过了规定的时限,就认为发生了死锁现象。这种诊断方法具有实现简单的优点,但存在可能误判死锁的现象。若时限设置得太长,死锁发生后又不能及时被发现。
等待图法是指用事务等待图动态反映所有事务的等待情况,即并发控制子系统周期性地检测事务等待图,如果发现图中存在回路,则判断系统中出现了死锁。
预防死锁的发生就是要破坏产生死锁的条件。通常有一次封锁法和顺序封锁法等预防方法。其中,一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。顺序封锁法是指预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。