2013-02-13 87 views
1

我的程序從文本文件中讀入迷宮,然後主程序創建3個不同的線程來深入這個迷宮並搜索出口。當一個線程發現退出時,它將在主線程中發佈它的解決方案路徑。多線程和pthread_join

在這個迷宮中,有一些陷阱,當一個線程遇到時會「死掉」,將這個陷阱的位置保存到全局的已發現陷阱點陣列中,以便其他線程知道應該避免的地方。在該線程死亡後,主程序將重新生成另一個線程來取代它的位置並繼續穿越迷宮。

一個線程可能遇到也可能不會遇到一個陷阱,而使用pthread_join只會等待一個特定的線程。我如何讓主線程同時等待每個線程?

+0

你如何加入只有已經準備好的線程?就像在某處設置標誌一樣? – PlasmaHH 2013-02-13 10:39:01

+0

我的線程存儲在pthread_t數組中,所以我可以使用全局整數來完成它嗎? 像這樣: pthread_mutex_lock(&mutex); while(!foundSolution) { pthread_cond_wait(&cond,&mutex); pthread_create(threads [exited],NULL,thrd_func,&pathfinder [exited]); } – 2013-02-13 11:07:33

回答

1

使用條件變量,它在pthreads中是pthread_cond_t。讓主線程等待條件變量,並在線程死亡之前讓它發出條件變量的信號。在僞代碼是這樣的:

主線程

//spawn first set of threads 
while(!done) { 
    pthread_cond_wait(&cond, &mutex); 
    //spawn another thread 
} 

工作者線程

//traverse maze 
pthread_cond_broadcast(&cond); 
//thread exit 

注意事項使用前需要獲取和釋放相關的互斥條件變量時。有關更多詳細信息,請參閱pthread_cond_wait的手冊頁。

+0

我想問的一個問題,對於工作線程,我在信號廣播之前還是之後(在退出之前)解鎖互斥鎖? – 2013-02-14 06:46:58

+0

在完成信號廣播後,您應該解鎖互斥鎖。 – 2013-02-14 17:38:23