- 解釋並發與並行,並說明兩者關系。
- 進程間有哪幾種關系?分別要采取什么策略?
- 為什么說進程的互斥也是一種同步?
- 解釋死鎖與“飢餓”,並說明兩者關系。
- 什么叫做臨界區?如何解決進程對臨界資源的訪問沖突?
- 信號量的物理意義是什么?
- 理解五個哲學家吃面問題,並能盲寫出偽代碼。
- 一個超市有n個顧客購物,只有一個收銀員,試用信號量P、V操作描述顧客進程和收銀員之間的關系。寫偽代碼。
答:
1、並行性是指兩個或多個事件在同一時刻發生。並發性是指兩個或多個事件在同一事件間隔內發生。
在多道程序環境下,並發性是指在一段時間內,宏觀上有多個程序同時運行,但在單處理器(CPU)系統每一時刻卻僅能有一道程序執行,故微觀上這些程序只能是分時地交替執行。倘若在計算機系統中有多個處理器,則這些可以並發執行的程序便被分配到多個處理器上,實現並行執行,即利用每個處理器來處理一個可並發執行的程序。
(1)一次至多只有一個進程進入臨界區內執行。
(2)如果已有進程在臨界區中,試圖進入此臨界區的其他進程應等待。
(3)進入臨界區內的進程應在有限時間內退出,以便讓等待隊列中的一個進程進入。
6、信號量是在多線程環境下使用的一種設施, 它負責協調各個線程, 以保證它們能夠正確、合理的使用公共資源。信號量分為單值和多值兩種,前者只能被一個線程獲得,后者可以被若干個線程獲得。利用信號量和PV操作即可解決並發進程競爭問題,又可解決並發進程協作問題。
7、五位哲學家吃面問題就是思考過后就會出現飢餓,就要吃面,吃面的前提就是要有左右兩邊的叉子才能吃,吃完把叉子放回左右兩邊。
semaphore CZ[5];
for(int i=0;i<5;i++)
CZ[i]=1;
cobegin
process philosopher_i(){
while(true) {
think();
P(CZ[i]);
P(CZ[(i+1)%5]);
eat();
V(CZ[i]);
V(CZ[(i+1)%5]);
}
}
coend
8、int waiting=0;
int customer=0;
int worker=1;
cobegin
process worker() {
while(true){
P(customer);
waiting--;
V(worker);
}
}
prodess customer() {
if(waiting<0) {
P(worker);
V(worker);
}
if(waiting>0)
waiting++;
}
coend