操作系统之信号量的应用习题一

三个进程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);
 } 

 

posted @ 2020-08-21 17:17  weihy  阅读(392)  评论(0编辑  收藏  举报