首页 习题正文

45.(7分)三个进程P1、P2、P3互斥使用一个包含N(N

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



【参考答案及解析】
定义信号量odd控制P1与P2之间的同步;even控制P1与P3之间的同步;empty 控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。程序如下: semaphore odd = 0,even = 0,empty = N,mutex = 1; P1() { x = produce (); //生成一个数 P(empty); //判断缓冲区是否有空单元 P (mutex);Put(); //缓冲区是否被占用 V(mutex); /释放缓冲区 if(x%2 == 0) V(even); //如果是偶数,向 P3发出信号 else V(odd); //如果是奇数,向 P2发出信号 } P2() { P (odd); //收到P1发来的信号,已产生一个奇数 P (mutex); // 缓冲区是否被占用 getodd (); V (mutex); //释放缓冲区 V(empty); //向P1发信号,多出一个空单元 countodd (); P3() { P (even); //收到P1发来的信号,已产生一个偶数 P (mutext); //缓冲区是否被占用 geteven(); V (mutex); //释放缓冲区 V(empty); //向P1发信号,多出一个空单元 counteven(); }

正在整理中,欢迎在文下评论区提供答案解析,谢谢!
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:https://scpro.cn/v/c34c27ac4ce847dd.html