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

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


person FourOfAKind    schedule 30.09.2011    source источник
comment
См. также stackoverflow.com/questions/3561095/ и software.intel.com/en-us/forums/showthread.php?t=53220   -  person derobert    schedule 30.09.2011


Ответы (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. */
    }
}
person cnicutar    schedule 30.09.2011
comment
@Lamia Вы можете позволить ему завершиться, манипулируя тем, что возвращается из queue_get / проверяя что-то внутри while. - person cnicutar; 30.09.2011
comment
Вы можете увидеть относительно простую реализацию объединения потоков с pthreads здесь. - person Jon Gjengset; 08.02.2014