这是一个devise问题。
我总共有6个线程和两个FIFO队列。 这6个线程是:
总数是500。
我的问题是:如何将这两个半消费者和消费者保留下来,而所有的500个条目都通过队列1排队到队列2并出列? 对于生产者线程来说,这很容易,因为我可以维护全局计数。
所以如果total_entries = 500,从例程返回(产生线程死亡)。 我想用一种有效的方式,而不是一些黑客。
环境:Linux,pthread,C / C ++。
在“500条目”未知的典型线程应用程序中,我认为对于某些总体控制过程,在工作完成时停止所有线程将更为常见。
对于您的具体问题,您可以将EOF
的概念添加到您的FIFO中,以便读者可以区分“现在无法使用”和“无法再使用”。 这可能是一个简单的作为一个主要价值(也许0
不是你的线程的合法价值,可以代表这一点)。
然后你的生产者“关闭”它的FIFO的末尾,当它变为空时,半消费者看到EOF
并关闭它们的下一个FIFO的结尾。 就像真正的文件一样,你需要引用计数来知道两个生产者是完成的还是两个半消费者都完成了。