3个进程P1 P2 P3互斥使用一个包含N个(N>O)单元的缓冲区 P1每次用produCe()生成一个正整数并用put

大学 缓冲区,进程,单元 已帮助 人

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

请帮忙给出正确答案和分析,谢谢!

热搜:四个互斥性施工方案的功能系数和成本系数

答案解析

难度★★☆ 搜索
  • 正确答案:定义信号量s1控制P1与P2之间的同步;s2控制P1与P3之间的同步;empty控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。 程序如下: Var sl=0s2=0empty=Nmutex=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.
    定义信号量s1控制P1与P2之间的同步;s2控制P1与P3之间的同步;empty控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。程序如下:Varsl=0,s2=0,empty=N,mutex=1;ParbeginP1:beginX=produce();/*生成一个数*/P(empty);/*判断缓冲区是否有空单元*/P(mutex);/*缓冲区是否被占用*/Put();Ifx%2==0V(s2);/*如果是偶数,向P3发出信号*/elseV(s1);/*如果是奇数,向P2发出信号*/V(mutex);/*使用完缓冲区,释放*/end.P2:beginP(s1);/*收到P1发来的信号,已产生一个奇数*/P(mutex);/*缓冲区是否被占用*/Getodd();Countodd():=countodd()+1;V(mutex);/*释放缓冲区*/V(empty);/*向P1发信号,多出一个空单元*/end.P3:beginP(s2)/*收到P1发来的信号,已产生一个偶数*/P(mutex);/*缓冲区是否被占用*/Geteven();Counteven():=counteven()+1;V(mutex);/*释放缓冲区*/V(empty);/*向P1发信号,多出一个空单元*/end.Parend.