多线程和pthread_join

时间:2013-02-13 10:35:26

标签: c++ multithreading pthread-join

我的程序从文本文件中读取迷宫,然后主程序创建3个不同的线程以钻研这个迷宫并搜索退出。当线程发现退出时,它将在主线程中发布其解决方案路径。

在这个迷宫中,存在陷阱,当线程遇到时,会“死亡”,将陷阱的位置保存到全局发现的陷阱点数组,以便其他线程知道应该避免的位置。在该线程死亡之后,主程序将重新生成另一个线程以取代它并继续遍历迷宫。

线程可能会遇到或可能不会遇到陷阱,并且使用pthread_join只会等待特定线程。如何让主线程同时等待每个线程?

1 个答案:

答案 0 :(得分: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的手册页。