题目如下::
俩人分别是A和B,都有个邮箱也叫A箱和B箱,俩人发邮件探讨问题,过程类似于,,A从A箱取邮件(B的问题),回答完,写个新邮件(新的问题)给B箱,B和A一样,就俩人互相给对方发邮件问问题。
思路就酱::
A:从A箱取邮件
回答问题
往B箱放邮件
B:从B箱取邮件
回答问题
往A箱放邮件
因为有俩邮箱,,所以信号量设置如下:
Full_A=x; //表示A箱的邮件数量
Empty_A=M-x; //表示A箱还可以存放的邮件数量
Full_B=y;
Empty_B=N-y;
mutex_A=1; //用于A箱的互斥
mutex_B=1; //用于B箱的互斥
大概内容就~~
viod processA
{
while(1)
{
P(Full_A); //看A箱里有没有邮件
P(mutex_A); //A在取A箱邮件时,B不能来放邮件吧(^_^)~
取邮件;
V(mutex_A);
V(Empty_A); //A箱可放邮件数加一哦~~
回答问题;
P(Empty_B); //看B箱里是不是满的
P(mutex_B); //A在往B箱里放邮件的时候,B不能去取呀(-。-)~
放邮件;
V(mutex_B);
V(Full_B); //B箱被放了一封邮件,QAQ委屈到加一~~
}
}
viod processB
{
while(1)
{
P(Full_B); //偷偷看一下B箱是不是有邮件~
P(mutex_B); //B:“我在取邮件,你不许来放!” A“~~QAQ~~”
取邮件;
V(mutex_B);
V(Empty_B); //B箱:“又少了一封,真好,感觉头更凉快了呢~”
回答问题;
P(Empty_A); //偷偷瞄一眼A箱满没满
P(mutex_A); //往A箱放邮件,如果他没在取的话
放邮件;
V(mutex_A);
V(Full_A); //A:“哇哦,我又充实了一封呢!”
}
}
撸啦啦噜啦啦噜啦噜啦嘞~~
嗯,明天考试,,嗯,,,加油~