哈哈哈,拿到考研的题目来考考你们,看看你们做的出来不,谁让我是正在考计算机研究生的筒子,希望能马上加入研发团队,毕竟我那么想当个技术宅。
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>