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

admin2013-04-26  56

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

选项

答案定义信号量odd控制P1与P2之间的同步;even控制P1与P3之间的同步;empty控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。程序如下: semaphore odd=0 I even=0 r empty=N r mutex=1; P1( ) { x=produce(); //生成一个数 P(empty); //50断缓冲区是否有空单元 P(mutex); //缓冲区是否被占用 Put(); V(mutex); //释放缓冲区 if(x%2==0) V(even); //如果是偶数,向P3发出信号 else V(odd); //如果是奇数,向P2发出信号 } P2() f 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://kaotiyun.com/show/3wxi777K
0

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