\parbox[t]{0.7\textwidth}{
本题属于利用信号量实现前驱的经典问题,操作C必须在A和B完成后执行,
操作E必须在C和D完成后执行,其执行顺序如右图所示。
定义同步信号量A、B、C、D,一开始四个操作都未执行,
令它们的初始值为0。在执行操作C前需先检查操作A和B是否已完成,
\vspace*{4pt}
}
\hfill\raisebox{-2cm}[0pt][0pt]{\includegraphics[]{2进程管理_34/figure/真题解析/2020年第45题.jpg}}
故在其之前加上P(A)和P(B),只有操作A和B都完成,
才能进行操作C;与之对应,在完成操作A和B后分别执行V(A)和V(B)操作,
确保操作的先后顺序。
同理,在执行操作E前需先检查操作C和D是否已完成,
故在其之前加上P(C)和P(D),只有操作C和D都完成,才能进行操作E。与之对应,
在完成操作C和D后分别执行V(C)和V(D)操作,确保操作的先后顺序,程序具体实现如下: