3个进程P1、P2、P3互斥使用一个包含Ⅳ个(N>0)单元的缓冲区,P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用getev

admin2016-03-29  27

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

选项

答案(1)定义信号量sl控制P1与P2之间的同步,s2控制P1与P3之间的同步,empty控制生产者与消费者之间的同步,mutex控制进程间互斥使用缓冲区。 (2)程序如下: var sl=0,s2=0,empty=N,mutex=1; parbegin P1:begin X=produce(); /*生成一个数*/ P(empty); /*判断缓冲区是否有空单元*/ P(mutex); /*缓冲区是否被占用术/ Put(); If x%2==0 V(s2); /*如果是偶数,向P3发出信号*/ else V(s1); /*如果是奇数,向P2发出信号*/ V(mutex); /*使用完缓冲区,释放木/ end P2:begin P(s1); /*收到P1发来的信号,已产生一个奇数*/ P(mutex); /*缓冲区是否被占用木/ Getodd();Countodd():=countodd()+1;V(mutex); /*释放缓冲区*/ V(empty); /*向P1发信号,多出一个空单元*/ end P3:begin P(S2) /*收到P1发来的信号,已产生一个偶数*/ P(mutex); /*缓冲区是否被占用*/ Geteven():Counteven():=counteven()+1;V(mutex); /*释放缓冲区*/ V(empty); /*向P1发信号,多出一个空单元*/ end parend

解析
转载请注明原文地址:https://kaotiyun.com/show/lnRi777K
0

相关试题推荐
最新回复(0)