我的程序从文本文件中读取迷宫,然后主程序创建 3 个不同的线程来钻研这个迷宫并搜索出口。当一个线程发现出口时,它会在主线程中发布它的解决方案路径。
在这个迷宫中,存在陷阱,当一个线程遇到时,它们会“死亡”,将该陷阱的位置保存到已发现的陷阱点的全局数组中,以便其他线程知道在哪里避免。在该线程死亡后,主程序将重新生成另一个线程来代替它并继续遍历迷宫。
一个线程可能会遇到也可能不会遇到陷阱,并且使用 pthread_join 只会等待特定的线程。如何让主线程同时等待每个线程?
我的程序从文本文件中读取迷宫,然后主程序创建 3 个不同的线程来钻研这个迷宫并搜索出口。当一个线程发现出口时,它会在主线程中发布它的解决方案路径。
在这个迷宫中,存在陷阱,当一个线程遇到时,它们会“死亡”,将该陷阱的位置保存到已发现的陷阱点的全局数组中,以便其他线程知道在哪里避免。在该线程死亡后,主程序将重新生成另一个线程来代替它并继续遍历迷宫。
一个线程可能会遇到也可能不会遇到陷阱,并且使用 pthread_join 只会等待特定的线程。如何让主线程同时等待每个线程?
使用 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
。