三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。

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

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

//首先定义信号量
//因为缓冲区是共享的,所以需要一个信号量
semaphore  mutex=1;
//进程P1和P2需要一个信号量
semaphore odd=0;
//进程P1和P3需要一个信号量
semaphore even=0;
//P1、P2和P3共享的缓冲区的空位需要一个
semaphore empty=N;
然后开始实现每一个进程
P1(){
	while(true){
		p(empty);
		num = produce();
		p(mutex);
		put();
		v(mutex);
		if(num%2 == 0)
			v(even);
		else
			v(odd);
	}
	
}

其余两个则是类似的思路来进行分析

P2(){
	while(1){
		p(odd);
		p(mutex);
		getodd();
		countodd();
		v(mutex);
		v(empty);
	}
}
P3(){
	while(1){
		p(even);
		p(mutex);
		geteven();
		counteven();
		v(mutex);
		v(empty);
	}
}

以上就是这道题的一个基本思路了,如果觉得还可以的话,就请点个赞对作者支持一下吧。

今天的文章三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/27057.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注