c++ - pthread多线程处理

  显示原文与译文双语对照的内容
0 0

这是一个设计问题。

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

  • 2 生成器生成"条目"( 这是无符号的int ) 并加入到 Queue1
  • 2 个半消费者从queue1和排队到 queue2
  • 2 个用户从queue2中弹出

条目的总数为 500.

My: 如何让那些 2个消费者和消费者在 500个条目被路由到队列 2和dequeued的情况下,保持存活。 对于生产者线程来说,这很容易,因为我可以维护条目的全局计数。

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

环境:Linux,pthread,c/C++ 。

时间:原作者:1个回答

0 0

在一个典型的线程应用程序中,我认为一些整体控制过程在完成工作时会阻止所有线程。

针对特定的问题,可以将 EOF的概念添加到fifo中,以便读者能够区分"现在没有可用的东西"和"没有任何可用的东西"。 这就像sentinal值( 也许 0 对于你的线程不是合法的值,可以表示) 一样简单。

然后你的生产者"关闭"的结束,当它变为空,半消费者看到 EOF 并关闭下一个FIFO的结束。 就像真正的文件,你需要参考计数,知道什么时候两个生产者完成或者者当两个消费者完成。

原作者:
...