【问题标题】:Implementing pthread pool实现线程池
【发布时间】:2011-11-28 13:49:23
【问题描述】:

我需要使用 pthreads 实现一个线程池。我无法前进。我发现了类似的问题here 但这仍然不能澄清我的问题。我的问题是一旦线程运行到终止,我可以再次使用它吗?提出这个问题的另一种方式是,线程在运行任务完成后如何返回其线程池。谁能指出我一些简单的 pthread 池文章?我的困惑主要是因为我有一点java背景。我在某个地方读到,一旦线程终止,我们就不能第二次在线程上调用 start()。

【问题讨论】:

标签: c threadpool


【解决方案1】:

我的问题是一旦线程运行到它的终止,我可以使用它吗 再来一次?

是的,这就是池的目的,重用线程而不是销毁它们。

线程如何返回其线程池。

通过尝试从队列中获取另一个元素。循环执行是一种方法。

这是我的实现中每个线程所做的事情(这是与pthread_create 一起使用的实际函数):

static void *
_tp_worker(void *arg)
{
    /* ... */

    /* Wait until tasks is available. */
    while (!queue_get(pool->pend_q, &t_ptr)) {
        /* And then execute it. */
    }
}

【讨论】:

  • @Lamia 您可以通过操作从queue_get 返回的内容/检查其中的内容来让它终止。
  • 您可以看到一个相对简单的线程池实现,使用 pthreads here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 2021-01-31
  • 2013-07-10
  • 2014-04-12
  • 2012-10-24
  • 2018-09-23
相关资源
最近更新 更多