【发布时间】:2011-04-06 21:45:23
【问题描述】:
我需要在有界缓冲区问题的经典生产者-消费者上实现一个变体。在某种程度上,它更像是读者-作者的路线,有一个有界的缓冲区。
我有一个生产者和两个消费者,但是两个消费者都必须在覆盖之前从缓冲区中读取每个项目,因此basic solution 不起作用。
我天真地尝试让生产者在空信号量上等待两次,然后发出两次满信号,但这并没有奏效,正如我所预料的那样。
一个非常简单的解决方案是让生产者生产,然后向每个消费者发出信号,然后等待两次。每个消费者等待生产者,然后消费,然后向读者发出信号。在这个解决方案中,至少消费者仍然并发执行,但它并没有真正抓住问题的实质,也没有利用缓冲区。我可以扩展它,让生产者在缓冲区中产生 n 个项目,然后等待消费者读取它们,这至少减少了一些开销,但最终没有什么不同。
约束:
- 仅限 pthread
- 只有一个缓冲区
总结:
- 一个生产者写入缓冲区
- 在被生产者覆盖之前,两个消费者必须分别从缓冲区中读取每个项目
我只是不知道在这种情况下如何应用传统解决方案。
【问题讨论】:
标签: synchronization