【正确答案】
【答案解析】①P(nonf1) ②V(none1) ③P(s1) ④V(s1)
⑤P(none2) ⑥P(s2) ⑦V(s2) ⑧V(nonf2)
[解析] 信号量及其P操作、V操作是解决同步、互斥问题的常用方法。在应用信号量时必须注意两点:
(1)对信号量只能执行P操作、V操作,且P操作、V操作必须成对出现:当实现互斥时,它们出现在同一进程中;当实现同步时,则出现在不同的进程中。
(2)同步P操作与互斥P操作在一起时,同步P操作应该放在互斥P操作之前。
本题是一个生产/消费者类型的同步互斥问题。有两组生产者和消费者,利用不同的缓冲区进行操作。第1组生产者和消费者是输入进程和加工进程,第2组生产者和消费者是加工进程和输出进程。在生产者进程与消费者进程之间存在一种同步关系:生产者不能往“满”的缓冲区中放产品,必须等待消费者取走产品之后(第1个同步点);消费者亦不能从“空”的缓冲区中取产品,必须等待生产者放入产品之后(第2个同步点)。也就是说,在生产者和消费者的程序中,需要使用两个信号量实现上述两个同步点。另外,还需要实现对缓冲区buf1和buf2互斥访问。
从列出的程序中可以看出,信号量s1和s2分别用于实现对缓冲区buf1和buf2互斥访问;none1和nonf1用于实现输入进程和加工进程之间的同步,none2和nonf1用于实现加工进程和输出进程之间的同步。