Реализация пула потоков - PullRequest
       2

Реализация пула потоков

3 голосов
/ 30 сентября 2011

Мне нужно реализовать пул потоков с помощью pthreads.Я не мог двигаться вперед.Я нашел похожий вопрос здесь Но это все еще не проясняет мой вопрос.Мой вопрос: как только поток завершается, могу ли я использовать его снова?Другой способ задать этот вопрос: как поток возвращается в свой пул потоков после запуска задачи до ее завершения.Может ли кто-нибудь указать мне на простую статью о пуле потоков?Моя путаница возникает в основном из-за того, что у меня немного опыта в Java.Я где-то читал, что мы не можем вызвать start () во второй раз после завершения потока.

1 Ответ

7 голосов
/ 30 сентября 2011

Мой вопрос: когда поток завершается, могу ли я его использовать? снова?

Да, цель пула - повторно использовать потоки, а не уничтожать их.

Как поток возвращается в свой пул потоков.

Пытаясь получить другой элемент из очереди. Делать это в цикле - это один из способов.

Вот что каждый поток делает в моей реализации (это фактическая функция, используемая с 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. */
    }
}
...