【正确答案】Semaphore s1=0,s2=0,empty=N, mutex=1;
main()
{
cobegin
P1();P2();P3();
coend
}
P1()
{
x=produce();
P(empty);
P(mutex);
Put()
if(x% 2==0) V(s2);
else V(s1);
V(mutex);
}
P2()
{
P(s1)
P(mutex);
Getodd();
Countodd()=countodd()+1;
V(mutex);
V(empty);
}
P3()
{
P(s2)
P(mutex);
Geteven();
Counteven():=counteven()+1;
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控制进程间互斥使用缓冲区。