c++ - 我怎样才能让线程继续并启动其他功能 - C++ with OpenMP?
问题描述
我有在 C++ 中使用 OpenMP 的并行循环和部分的经验,但现在我需要让线程继续运行并启动一个函数,而一个线程继续运行一个 forner 函数
函数 table_builder_1 创建一个矩阵,在所有线程完成运行后,只有一个线程开始将矩阵写入文件(当前所有其他线程都在等待他)。
1.我怎样才能让线程继续并启动函数 table_builder_2?
2.作者线程完成后他会加入其他人吗?
int main{
Class foo
foo.table_builder_1;
foo.table_builder_2;
return 0;
}
void foo:table_builder_1{
#pragma omp parallel for schedule(dynamic)
for (int i = 0; i < N_size; i++){
for (int j = 0; j < N_size; j++) {
create table
}
}
\\write the table in file:
file.write (Table)
return;
}
备注:1.我不能并行化写,因为数据需要排序。2.函数table_builder_2和table_builder_1做的一样
解决方案
这听起来像是一个很好的案例#pragma omp single nowait
。
#pragma omp single
指定一段代码应该由单线程(不一定是主线程)执行(来自this answer。)
该nowait
子句防止其他线程等待写入的线程。
推荐阅读
- android - 使用 RxDownload Manager 下载文件时出错
- apache-spark - 分区过滤器顺序是否对火花读取有显着的性能影响
- javascript - 使用 Promise.allSettled 和 try/catch 处理未处理的承诺拒绝
- android - 改造 + Mediastore + API 30
- javascript - 在 webpack 构建之后(通过 gulp) - 切换 JS 脚本停止绑定到所有切换
- mongodb - $lookup 管道中的地理查询
- java - 使用 FasterXML 解析带有别名的 yml 文件
- gradle - 找不到参数 [文件集合] 的方法 compile()
- azure - Azure B2C SSO,是否可以根据客户端应用程序发送不同的索赔数据
- javascript - Vue从子组件中获取数据