Мой вопрос: когда поток завершается, могу ли я его использовать?
снова?
Да, цель пула - повторно использовать потоки, а не уничтожать их.
Как поток возвращается в свой пул потоков.
Пытаясь получить другой элемент из очереди. Делать это в цикле - это один из способов.
Вот что каждый поток делает в моей реализации (это фактическая функция, используемая с 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. */
}
}