多线程和pthread_join
Multithreading and 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
的手册页。
相关文章:
- 在std::thread中,joinable()然后join()线程安全吗
- join() 失败,如果在线程内部调用 io_context.run()
- 在 c++11 中为 pthread 设置调度参数
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- pthread只有在线程数量较少时才可以正常工作
- pthread执行时间比顺序执行时间差
- 使用 -pthread 如何不违反 ODR 规则?
- 使用 pthread 的多线程
- 销毁 pthread 互斥体和 C++ 中的取消初始化顺序
- 函数 AfxEndThread 中的读取访问冲突"pThread-> was nullptr"
- 锁定步进pthread互斥
- Pthread段错误,使用指向main中变量的指针
- pthread导致的内存泄漏
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- std::future::get()或std::future::wait()是std::thread::join()的替
- 正确地编写一个类,并将pthread与vlc库和c++一起使用
- 直接读取 pthread 互斥锁的所有者字段是否安全?
- 为什么 pthread 会减慢代码速度?
- C++/pthread/join 错误消息的含义 "what(): Invalid argument"
- 在主函数中调用join子函数pthread