请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。 15

三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd... 三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。 展开
 我来答
百度网友045921e
2013-10-26
知道答主
回答量:6
采纳率:0%
帮助的人:8438
展开全部
解:缓冲区是一互斥信号量,因此设互斥信号量
mutex
P1、P2
因为奇数的设置与取用而同步,设同步信号量odd
P1、P3因为偶数的设置与取用而同步,设同步信号量even;
P1、P2、P3因为共享缓冲区,设同步信号量empty。

semaphore

mutex=1;

//
缓冲区互斥信号量

semaphore

odd=0, even=0 //
奇数、偶数进程的同步信号量

semaphore

empty=N //
空缓冲区单元个数信号量

main( )
cobegin{
process P1

while(true){

number=produce();

p(empty); //
递减空缓冲区的单元个数

p(mutex); //
互斥访问缓冲区

put(

);
v(mutex); //
恢复访问缓冲区

if number%2==0 v(even); //
为偶数允许取偶数

else v(odd); //
为奇数允许取奇数

}

process P2

process P3

while(true){

while(true){

p(odd); //
互斥奇数

p(even);
p(mutex); //
互斥访问缓冲区

p(mutex);
getodd(

);

getevend(

);
v(mutex); //
恢复访问缓冲区

v(mutex);
v(empty); //
递增空缓冲区的单元个数

v(empty);
countodd(); }

counteven();}
}
coend
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式