2011-09-30 475 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