操作系统之信号量的应用习题一
三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用“produce()”生成一个正整数并用“put()”送入缓冲区某一空单元中;P2每次用“getodd()”从该缓冲区中取出一个奇数并用“countodd()”统计奇数个数;P3每次用“geteven()”从该缓冲区中取出一个偶数并用“countieven()”统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。
Semaphore empty=n,odd=0,even=0,mutex=1; void P1() { P(empty); P(mutex); num=produce(); V(mutex); if(num%2==0) V(even); else V(odd); } void P2() { P(odd); P(mutex); getodd(); countodd(); V(mutex); V(empty); } void P3() { P(even); P(mutex); geteven(); counteven(); V(mutex); V(empty); }