一个制片人,两个消费者变种

时间:2011-04-06 21:45:24

标签: synchronization

我需要在具有有界缓冲问题的经典生产者 - 消费者上实现变体。在某种程度上,它更像读者 - 作者,有限的缓冲区。

我有一个生产者和两个消费者,但是两个消费者必须在覆盖之前从缓冲区中读取每个项目,因此basic solution不起作用。

我天真地尝试让生产者等待空信号量两次,然后发出两次信号,但这不起作用,正如我预期的那样。

一个非常简单的解决方案是让生产者生产,然后向每个消费者发出信号,然后等待两次。每个消费者等待生产者,然后消费,然后向读者发出信号。在这个解决方案中,至少消费者仍然同时执行,但它并没有真正捕捉到问题的精神,并且它没有利用缓冲区。我可以扩展它,以便生产者在缓冲区中生成 n 项,然后等待消费者阅读它们,这至少减少了一些开销,但最终没有任何不同。

约束:

  • 仅限pthreads
  • 只有一个缓冲区

要点:

  • 一个制作人写入缓冲区
  • 两个消费者必须先从缓冲区读取每个项目,然后才能被生产者
  • 覆盖

在这种情况下,我无法弄清楚如何应用传统解决方案。

1 个答案:

答案 0 :(得分:0)

如何为每个消费者提供自己的数据项引用队列,然后让生产者为两个队列提供数据?