c++ - 多线程和 pthread_join

标签 c++ multithreading 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 的手册页了解更多详细信息。

关于c++ - 多线程和 pthread_join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14851536/

相关文章:

c# - 线程方法参数

c - 在 C 中类型转换 pthread 的返回值时出现意外结果

c++ - 错误: cannot convert ‘char*’ to ‘int*’ in assignment (also for 'double*' to 'int*' )

c++ - 在单独的线程中处理 vector 元素

java - java中同步方法同时被访问会发生什么?

c - 分离的 pthread 导致内存泄漏

c - 作为引用传递的变量的值在线程中发生更改

c++ - 装修调度系统

java - 如何在 jni 中链接 prebuild

c++ - lib 中已经定义了标准库,导致链接器错误