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