Мне нужно реализовать пул потоков с помощью pthreads. Я не мог двигаться вперед. Я нашел аналогичный вопрос здесь Но это все еще не уточняет мой вопрос. Мой вопрос: как только поток завершится, могу ли я использовать его снова? Другой способ задать этот вопрос: как поток возвращается в свой пул потоков после выполнения задачи до ее завершения. Может ли кто-нибудь указать мне на какую-нибудь простую статью о пуле pthread? Мое замешательство возникает в основном из-за того, что у меня немного опыта работы с Java. Я где-то читал, что мы не можем вызывать start() в потоке во второй раз после его завершения.
Реализация пула потоков
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
@Lamia Вы можете позволить ему завершиться, манипулируя тем, что возвращается из
queue_get / проверяя что-то внутри while.
- person cnicutar; 30.09.2011
Вы можете увидеть относительно простую реализацию объединения потоков с pthreads здесь.
- person Jon Gjengset; 08.02.2014