这是一个设计问题。
我总共有6个线程和两个FIFO队列。这6个线程是:
排到queue2
参赛总人数为500人。
我的问题是:当所有500个条目都通过queue1路由到队列2并退出队列时,我如何才能让这两个半消费者和消费者存活呢?对于生产者线程来说,这很容易,因为我可以维护条目的全局计数。
因此,如果total_entries = 500,则从例程返回(生成线程模)。我想用一种有效的方法来代替一些黑客。
环境: Linux,线程,C/C++。
发布于 2011-02-07 23:16:50
在一个典型的线程应用程序中,“500个条目”是未知的,我认为某些总体控制进程在完成工作时停止所有线程会更常见。
对于您的具体问题,您可以将EOF的概念添加到FIFO中,以便读者能够区分“现在没有可用”和“再也没有可用”。这可能和sentinal一样简单(也许0不是线程的合法值,可以表示这个值)。
然后你的生产者“关闭”它的FIFO的末端,当它变成空的时候,半消费者看到EOF并关闭他们的下一个FIFO的结束。就像真正的文件一样,你需要参考计数才能知道两家生产商什么时候都做了,或者两个半消费者都是什么时候做的。
https://stackoverflow.com/questions/4927696
复制相似问题