2011-09-30 248 views
3

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

+0

参见http://stackoverflow.com/questions/3561095/a-very-simple-线程池使用,并行线程,在-C和http://software.intel.com/en-us/forums/showthread.php?t=53220 – derobert

回答

7

我的问题是一旦一个线程运行到它的终止,我可以再次使用它 ?

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

如何线程返回到它的线程池。

通过试图从队列中另一个元素。循环做是一种方法。

这里是每一个线程做在我的实现(这是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. */ 
    } 
} 
+0

我得到了点。我们从来没有让这种终止 – FourOfAKind

+1

@Lamia你可以让它通过操纵取之于'queue_get'返回/检查,而里面的东西终止。 – cnicutar

+0

好的。非常感谢。我得到了主要观点。 – FourOfAKind