pthread多线程

时间:2011-02-07 23:00:25

标签: c++ linux multithreading synchronization pthreads

这是一个设计问题。

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

  • 2个生成器生成“entry”(无符号整数)并入队到Queue1
  • 2个半消费者将队列从队列1中排队并入队到队列2
  • 2名消费者从队列2出发

参赛作品总数为500.

我的问题是:如何将这两个半消费者和消费者保持活跃状态​​,而所有500个条目都通过队列1路由到队列2并出列?对于生产者线程,它很容易,因为我可以维护全局条目数。

因此,如果total_entries = 500,则从例程返回(生成线程死亡)。我想用一种有效的方式而不是一些黑客。

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

1 个答案:

答案 0 :(得分:3)

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

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

然后你的制作人“关闭”它的FIFO结束,当它变空时,半消费者看到EOF并关闭他们下一个FIFO的结束。就像真实文件一样,您需要引用计数来了解两个生产者何时完成或何时完成两个半消费者。