实现 pthread 池

发布于 2024-12-07 13:34:10 字数 311 浏览 1 评论 0原文

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

I need to implement a thread pool using pthreads. I could not move forward. I found similar question here
But that still does not clarify my question. My question is once a thread runs to its termination can I use it again? Another way of putting this question is, How does a thread return to its thread pool after running a task to its completion. Could anyone point me to some simple pthread pool article? My confusion arises mainly because I have little bit of java background. I read somewhere we cannot call start() on thread second time once it terminates.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅笑依然 2024-12-14 13:34:10

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

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

线程如何返回其线程池。

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

以下是我的实现中每个线程所做的事情(这是与 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. */
    }
}

My question is once a thread runs to its termination can I use it
again?

Yes, that's the purpose of the pool, to reuse threads instead of destroying them.

How does a thread return to its thread pool.

By trying to get another element from the queue. Doing it in a loop is one way.

Here is what every thread does in my implementation (this is the actual function used with 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. */
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文