2013-10-08 50 views
1

我目前正在處理,我相信,是一個相當簡單的問題,我似乎無法解決。POSIX pthread多次使用相同的線程

我在我的程序中有兩個線程。線程運行得很好,但它是線程的重用,導致了問題。僞代碼如下:

main() { 

create thread 1; 
create thread 2; 

join thread 1; 

} 

thread 1 { 
    while true 
    if(some condition) 
     join thread 2 
     // Use the returned value from thread 2 

} 

thread 2 { 
    while true 
    if(some condition) 
     // do something 
     exit thread 2(with some return value to thread 1). 
} 

所以,當某些條件線程1被滿足,我希望它termine線程2,直到它的工作要做,這工作得很好。線2到達狀態並退出線程。但是,當我回到線程1的while循環並再次達到該條件時,我希望它再次重新運行線程2。這是導致問題的原因。線程1執行一次後,線程1會忽略我的連接語句,並在while循環中進行輪詢,這是唯一正在運行的線程。

所以我的問題是。我怎樣才能重用連接線程2屬性,所以程序連續運行?

+0

你想*重新開始*第2步,還是要重複使用它的返回?如果後者只是保存它,並且不要調用'join'。如果前者,然後重置條件並重新啓動線程。 –

+0

它是前者。線程2更改兩個線程之間共享的變量。我想重用線程2,所以變量有正確的語句,供線程1使用。所以問題是,我該如何重新啓動他的線程? –

回答

0

線程1執行一次後,線程1忽略我的連接語句,只是在while循環中輪詢, 是唯一正在運行的線程。

請注意,在您的情況下,pthread_join()很可能會失敗,並出現錯誤2.時間。檢查其返回值。

但是,由於您的線程2已退出,因此沒有線程可以等待。 您必須重新啓動線程2。 那就是:

thread 1 { 
    while true 
    if(some condition) 
     join thread 2 
     // Use the returned value from thread 2 
     create thread 2; 
} 
+0

我試圖做到這一點,但是,它會導致我的程序崩潰。 第二個創建方法應該與主create方法有什麼不同? –

+0

@HansPeterson如果它崩潰了,那麼你可能想在調試器中運行,以幫助你找出它爲什麼崩潰。這可能是你忘了重置的狀態嗎? –

+0

謝謝:)現在就工作吧。我不得不重新創建我交給pthread_create方法的變量。可能是導致崩潰的空指針。 –