3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 getodd() 从该缓冲区中取出一个奇数,并用 countodd() 统计奇数的个数 ;P3 每次用geteven() 从该缓冲区中取出一个偶数,并用 counteven() 统计偶数的个数。请用信号量机制实现这 3 个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。
// 互斥信号量 mutex = 1; // 共享内存中的偶数个数 even = 0; // 奇数个数 odd = 0; // 共享内存的剩余空间 empty = n; p1(){ while(true){ p(empty);//等待有空位置 num = produce();//生成正数 p(mutex);//互斥 put(num);//放入缓冲区 v(mutex);//释放 v(empty);//n中添加一个元素 if(num % 2 == 0){ v(even);//偶数增加 }else{ v(odd);//奇数增加 } } } p2(){ while(true){ p(odd);//等待一个奇数 p(mutex);//互斥 getodd();//取出奇数 countodd();//统计奇数个数 v(mutes);//释放 v(odd);//奇数个数减少 } } p3(){ while(true){ p(event);//等待一个偶数 p(mutex);//互斥 geteven();//取出偶数 counteven();//统计偶数个数 v(mutes);//释放 v(event);//偶数个数减少 } }