单选题 若系统中存在一个等待事务集{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 ,则系统处于死锁的工作状态。这是因为系统中两个或多个事务都已封锁了相关数据对象,而其他事务又请求对这些数据对象加锁,从而出现死等待。
通常,死锁的诊断方法有超时法和等待图法。其中,超时法是指一个事务的等待时间超过了规定的时限,就认为发生了死锁现象。这种诊断方法具有实现简单的优点,但存在可能误判死锁的现象。若时限设置得太长,死锁发生后又不能及时被发现。
等待图法是指用事务等待图动态反映所有事务的等待情况,即并发控制子系统周期性地检测事务等待图,如果发现图中存在回路,则判断系统中出现了死锁。
预防死锁的发生就是要破坏产生死锁的条件。通常有一次封锁法和顺序封锁法等预防方法。其中,一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。顺序封锁法是指预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。