生产者—消费者问题,俩人俩邮箱

博客围绕两人通过邮箱A和B互相发邮件探讨问题展开,给出了A和B处理邮件的思路,同时设置了信号量来控制邮箱状态,如Full_A、Empty_A等,还给出了processA和processB的代码实现,用于模拟邮件的取放过程。

 

 

 

题目如下::

俩人分别是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:“哇哦,我又充实了一封呢!”

}

}


撸啦啦噜啦啦噜啦噜啦嘞~~

嗯,明天考试,,嗯,,,加油~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值