复杂的消息缓冲问题PV

部署运行你感兴趣的模型镜像

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

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

(2) 对每个消息,B1,B2,Bn2都须各接收一次,读入各自的数据区内

(3)m个缓冲区都满时,发送进程等待,没有可读消息时,接收进程等待。

试用P、V操作组织正确的发送和接收工作。

提示:每个缓冲区只要写一次但要读n2次,因此,可以看成n2组缓冲区,每个发送者要同时写n2个缓冲区,而每个接收者只要读它自己的缓冲区。

Sin[n2]=m

Sout[n2]=0;

先将问题简化:设缓冲区的大小为1有一个发送进程A1有二个接收进程B1、B2

设有信号量Sin[1]、Sin[2]初值为1

设有信号量Sout[1]、Sout[2]初值为0

A1:
while (1)

{
P(Sin[1]);
P(Sin[2]);
将数据放入缓冲区

V(Sout[1]);

V(Sout[2]);
}

Bi:

while (1)

{

P(Sout[i]);

从缓冲区取数

V(Sin[i]);

}

设缓冲区的大小为m,有一个发送进程A1有二个接收进程B1、B2

设有信号量Sin[1]、Sin[2]初值为m

设有信号量Sout[1]、Sout[2]初值为0

A1:
while (1)

{
P(Sin[1]);
P(Sin[2]);
P(mutex);

将数据放入缓冲区

V(mutex);

V(Sout[1]);

V(Sout[2]);
}

Bi:

while (1)

{

P(Sout[i]);

P(mutex);

从缓冲区取数

V(mutex);

V(Sin[i]);

};

设缓冲区的大小为m有n1个发送进程A1….An1有n2个接收进程B1…Bn2

设有n2个信号量Sin[n2]初值均为m

设有n2个信号量Sout[n2]初值均为0

设当前要写入的缓冲区为writenum = 0;

设n2个接受进程分别要读入的缓冲区为readnum[n2]={0,0...,0}

Aj:

while (1)

{

for(i=1;i<=n2;i++)

P(Sin[i]);
P(mutex);

将数据放入缓冲区i

i = (i + 1) % m;

V(mutex);

for(i=1;i<=n2;i++)V(Sout[i]);

}

Bi:

while (1)

{

P(Sout[i]);

P(mutex);

从缓冲区readnum[i]取数

readnum[i] = (readnum[i] + 1) % m;

V(mutex);

V(Sin[i]);

};

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值