【问题标题】:pthread multithreadingpthread 多线程
【发布时间】:2011-02-07 23:00:24
【问题描述】:

这是一个设计问题。

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

  • 2 个生产者产生“条目”(无符号整数)并排入队列 Queue1
  • 2 个半消费者从 queue1 出列条目并入队到 queue2
  • 2 个消费者从 queue2 出列

条目总数为500。

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

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

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

【问题讨论】:

    标签: c++ linux multithreading synchronization pthreads


    【解决方案1】:

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

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

    然后你的生产者“关闭”它的 FIFO 末端,当它变空时,半消费者看到 EOF 并关闭他们的下一个 FIFO 末端。就像使用真实文件一样,您需要引用计数才能知道两个生产者何时完成或两个半消费者何时完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      相关资源
      最近更新 更多