缓冲区发送消息PV操作题目详细分析

进程A1、A2、…Anl通过m个缓冲区向进程B1、B2、…Bn2不断地发送消息。发送和接收工作遵循如下规则:

(1)每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小与消息长度一样。

(2)对于每一个消息,B1、B2、…Bn2都需各接收一次,读入自己的数据区内。

(3)m个缓冲区都满时,发送进程等待;没有可读的消息时,接收进程等待。 试用wait、signal操作描述它们的同步关系。

 

这个题目有n1个写进程,m个缓冲区,n2个读进程。写进程发送一次消息占用一个缓冲区,同时这些消息向每个读进程发送。

信号量分析:

(1)对于缓冲区的读写互斥访问需要一个信号量:mutex = 1。

(2)每个读进程需要一个表示剩余多少可读的信号量full[i] = 0,一个表示空缓冲区数量的信号empty[i] = m(最多空出m个)。

 

empty[s2] = m;
full[s2] = 0;

while(1)//写进程
{
for(i = 0; i< s2; i++)
{
P(empty[i]);
}
P(mutex);
消息放入缓冲区;
V(mutex);
for(i = 0; i< s2; i++)
{
V(full[i]);
}
}


while(1)//读进程
{
P(full[i]);
P(mutex);
读取缓冲区;
V(mutex);
V(empty[i]);
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值