结构推理 系统有输入机和打印机各一台,均采用P-V操作来实现分配和释放。现在有两个进程都要使用它们。这会发生死锁吗?试说明理由。
【正确答案】采用信号量上的P、V操作,只能正确地完成对设备的申请与释放,但不能控制进程对设备的申请、释放顺序。因此,当进程申请和释放设备的顺序不当时,仍会发生死锁。例如,进程A使用输入机和打印机的顺序是:
   请求打印机(Ar1)→请求输入机(Ar2)→释放打印机(Ar3)→释放输入机(Ar4)
   进程B使用输入机和打印机的顺序是:
   请求输入机(Br1)→请求打印机(Br2)→释放输入机(Br3)→释放打印机(Br4)
   其中圆括号里标注的字母,表示某进程对设备的某种使用。例如,Ar1表示进程A请求打印机。由于A和B都是进程,它们的执行可以交叉进行。执行顺序:
   Ar1→Ar2→Ar3→Ar4→Br1→Br2→Br3→Br4
   或
   Ar1→Ar2→Br1→Ar3→Ar4→Br2→Br3→Br4
   都是合理的交叉。但是,以Ar1→Br1开始的执行就无法再往下进行了。因为进程A执行了Ar1,表明它占用了打印机。接着进程B执行了Br1,表明它占用了输入机。这样一来,不管后面是执行Ar2(进程A申请输入机)还是执行Br2(进程B申请打印机),都不可能得到满足,两个进程先后被阻塞:进程A占据着打印机而等待输入机,进程B占据着输入机而等待打印机。这就产生了死锁。
【答案解析】