问题 多项选择题

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

答案

参考答案:Semaphore sA=0,sB=0,empty=N, mutex=A;
main()
{
cobegin
PA();PB();PC();
coend
}
PA()
{
x=produce();
P(empty);
P(mutex);
Put()
if(x% B==0) V(sB);
else V(sA);
V(mutex);
}
PB()
{
P(sA)
P(mutex);
Getodd();
Countodd()=countodd()+A;
V(mutex);
V(empty);
}
PC()
{
P(sB)
P(mutex);
Geteven();
Counteven():=counteven()+A;
V(mutex);
V(empty);

解析: 本题目考查进程的同步与互斥。本题目是苹果一橘子问题(例14)的变形。进程P1可以看做是生产者,进程P2和P3可看做是消费者,进程P1和P2、P3共享大小为N的缓冲区。进程P1、P2和P3需互斥使用缓冲区,P1进程需要与P2进程、P3进程同步。定义信号量S1控制P1与P2之间的同步;S2控制P1与P3之间的同步;empty控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。

单项选择题
单项选择题