有參考書上的原分析如下:
這是一個典型的生產(chǎn)者-消費者的問題,其中進程PA和PB分別為生產(chǎn)者與消費者,管道為臨界區(qū)。我們的程序應(yīng)該設(shè)置1個同步信號量,為1時說明管道已滿拒絕PA再寫入數(shù)據(jù),為0時說明管道為空拒絕PB再讀出數(shù)據(jù),管道初始是沒有數(shù)據(jù)的,所以初始值為0,(特例情況即管道的大小為1個單位);程序還需要1個互斥信號量,來保證程序只有一個進程訪問管道,初始值為1。因此選擇B。
事實上這個分析是錯誤的,但是答案是正確,為什么?
首先來明白什么是互斥信號量;コ庑盘柫渴且粋可以處于兩態(tài)之一的變量:解鎖態(tài)和加鎖態(tài)。在該題中,即表示:PA、PB中任何一個在對管道進行讀或?qū)憰r,剩下的那個進程必須等待,而不能一起進行讀寫,只有當(dāng)其中一個操作之后才可以讓另一個對管道操作。而互斥信號量的使用如下:
// mutext是互斥信號量進程A:
// mutext是互斥信號量進程A:
{
......
P(mutext);
臨界區(qū);
V(mutext);
.....
}
進程B:
{
......
P(mutext);
臨界區(qū);
V(mutext);
.....
}
再回到那個題目,如果按照該題的原分析,使用一個同步信號量一個互斥信號量,不管你如何調(diào)整語句順序,都不能使PA、PB正常并發(fā)執(zhí)行。
相關(guān)推薦:
2008下半年軟件水平考試軟件設(shè)計師押題試卷 2008年5月計算機軟件水平考試各科試題答案匯總