生产者:append; semSignal; produce; ...; append; semSignal; produce; ...
消费者:consume;…;take; semWait; consume; ...; take; semWait; ...
生产者总向缓冲区添加一个新元素,并在消费者消费了前面的元素后发出信号。生产者通常将元素添加到空缓冲区中,而消费者通常取走缓冲区中的唯一元素。尽管消费者从不在信号量上阻塞,但必须进行大量的信号最调用,因此产生相当多的开销。
构建一个新程序,以便在这种情况下更有效率。提示:允许 n 的值为-1,这表示不仅缓冲区为空,而且消费者也检测到这个事实并将被阻塞,直到生产者产生新数据。这个方案不需要使用图 5.10中的局部变最 m。