问答题 两个进程A和B,每一个进程都需要读取数据库中的记录1、2、3。假如这两个进程都以1、2、3的次序请求读取记录,系统将不会发生死锁。但如果A以3、2、1的次序读取记录,B以1、2、3的次序读取记录,则死锁可能会发生。试计算:两个进程读取记录的次序如果不确定,那么系统保证不发生死锁的概率是多少?

【正确答案】本题中进程请求到一个记录后,会独占读取该记录并继续请求下一个记录,直到进程结束,释放所有记录的读取权。当两个进程都以相同次序请求读取记录时,先请求到读取记录的进程会先执行,而另一进程只有在此进程全部读取结束后才能执行,故系统不会发生死锁。
如果进程A、B以不同次序读取记录,死锁可能会发生。按题中条件知,两进程读取次序正好相反,若某一时刻两进程都在读取记录,则随着进程的执行,必定出现各自占有记录并请求读取对方记录的死锁局面。所以只有在两个进程依次读取三个记录(不能出现交替)的情况下,才能保证系统不发生死锁。我们以简单的平均概率进行[分析]
每次读取记录时,两进程各有1/2的概率请求成功。对于依次读取的情形,A以3、2、1的次序连续读取记录成功的概率是(1/2)3]=1/8;同理,B以1、2、3的次序连续读取记录成功的概率也是1/8。故系统不发生死锁的概率是1/8+1/8=1/4。
【答案解析】[注意] 本题可能会有一种错误的思路。按照6次读取记录出现AAABBB和BBBAAA的概率计算,结果为[*]这里的错误在于,有些读取记录的序列是不可能出现的,弧ABABAB,A读取记录3,B读取记录1,A再读取记录2,这时已经出现死锁,进程不能继续推进。