多线程和pthread_join

Multithreading and pthread_join

本文关键字:join pthread 多线程      更新时间:2023-10-16

我的程序从一个文本文件中读取迷宫,然后主程序创建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的手册页。