標籤:
哈哈哈,拿到考研的題目來考考你們,看看你們做的出來不,誰讓我是正在考電腦研究生的筒子,希望能馬上加入研發團隊,畢竟我那麼想當個技術宅。
45. 有A、B兩人通過信箱進行辯論,每人都從自己的信箱中取得對方的問題。將答案和向對方提出的新問題組成一個郵件放入對方的郵箱中,設A的信箱最多放M個郵件,B的信箱最多放 N個郵件。初始時A的信箱中有x個郵件(0<x<M). B 中有y個(0<y<N)。辯論者每取出一個郵件,郵件數減1.
A、B兩人操作過程:
Code Begin
A{
While(TRUE){
從A的信箱中取出一個郵件;
回答問題並提出一個新問題;
將新郵件放入B的信箱;
}
}
B{
While(TRUE){
從B的信箱中取出一個郵件;
回答問題並提出一個新問題;
將新郵件放入A的信箱;
}
}
Code End
當信箱不為空白時,辯論者才能從信箱中取郵件,否則等待。
當信箱不滿時,辯論者才能將新郵件放入信箱,否則等待。
請添加必要的訊號量和P、V(或wait, signed)操作,以實現上述過程的同步,要求寫出完整過程,並說明訊號量的含義和初值。
【參考答案】
Semaphore mutexA=1;
Semaphore mutexB=1;
Semaphore emptyA=M;
Semaphore emptyB=N;
Semaphore fullA=0;
Semaphore fullB=0;
Code Begin
A{
While(TRUE){
P(fullA);
P(mutexA)
Get a mail from A_mailbox;
V(mutexA);
V(fullA);
Answer the question and raise a question;
P(emptyB);
P(mutexB)
send the mail to B;
V(mutexB);
V(emptyB);
}
}
B{
While(TRUE){
P(fullB);
P(mutexB)
Get a mail from B_mailbox;
V(mutexB);
V(fullB);
Answer the question and raise a question;
P(emptyA);
P(mutexA)
send the mail to A;
V(mutexA);
V(emptyA);
}
}
Code End
【考查知識點】 考察了利用訊號量進程同步問題。
<P><A href="http://www.kyjxy.com/fushi/zhinan/">考研複試英語聽力</A></P>
<P><A href="http://www.kyjxy.com/yingyu/zhenti/">考研英語真題</A></P>
<P><A href="http://www.kyjxy.com/yuanxiao/zhengce/">考研專業目錄</A></P>
2015考研電腦真題大題訊號量進程同步問題