首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程多线程

线程多线程
EN

Stack Overflow用户
提问于 2011-02-07 23:00:24
回答 1查看 516关注 0票数 2

这是一个设计问题。

我总共有6个线程和两个FIFO队列。这6个线程是:

  • 2生产者生成" entry“(它是无符号int),并排队到Queue1
  • 2半消费者,从queue1排出条目,并从queue2

排到queue2

  • 2消费者。

参赛总人数为500人。

我的问题是:当所有500个条目都通过queue1路由到队列2并退出队列时,我如何才能让这两个半消费者和消费者存活呢?对于生产者线程来说,这很容易,因为我可以维护条目的全局计数。

因此,如果total_entries = 500,则从例程返回(生成线程模)。我想用一种有效的方法来代替一些黑客。

环境: Linux,线程,C/C++。

EN

回答 1

Stack Overflow用户

发布于 2011-02-07 23:16:50

在一个典型的线程应用程序中,“500个条目”是未知的,我认为某些总体控制进程在完成工作时停止所有线程会更常见。

对于您的具体问题,您可以将EOF的概念添加到FIFO中,以便读者能够区分“现在没有可用”和“再也没有可用”。这可能和sentinal一样简单(也许0不是线程的合法值,可以表示这个值)。

然后你的生产者“关闭”它的FIFO的末端,当它变成空的时候,半消费者看到EOF并关闭他们的下一个FIFO的结束。就像真正的文件一样,你需要参考计数才能知道两家生产商什么时候都做了,或者两个半消费者都是什么时候做的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4927696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档