前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 get

3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 get

作者头像
一只
发布2023-11-03 09:25:54
6170
发布2023-11-03 09:25:54
举报

3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 getodd() 从该缓冲区中取出一个奇数,并用 countodd() 统计奇数的个数 ;P3 每次用geteven() 从该缓冲区中取出一个偶数,并用 counteven() 统计偶数的个数。请用信号量机制实现这 3 个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。

代码语言:javascript
复制
// 互斥信号量
mutex = 1;
// 共享内存中的偶数个数
even = 0;
// 奇数个数
odd = 0;
// 共享内存的剩余空间
empty = n;

p1(){
    while(true){
        p(empty);//等待有空位置
	num = produce();//生成正数
	p(mutex);//互斥
	put(num);//放入缓冲区
	v(mutex);//释放
	v(empty);//n中添加一个元素
	if(num % 2 == 0){
	    v(even);//偶数增加
	}else{
	    v(odd);//奇数增加
	}
    }
}


p2(){
    while(true){
	p(odd);//等待一个奇数
	p(mutex);//互斥
	getodd();//取出奇数
	countodd();//统计奇数个数
	v(mutes);//释放
	v(odd);//奇数个数减少
    }
}

p3(){
    while(true){
	p(event);//等待一个偶数
	p(mutex);//互斥
	geteven();//取出偶数
	counteven();//统计偶数个数
	v(mutes);//释放
	v(event);//偶数个数减少
    }
}
​
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档