首页 > 解决方案 > 我怎样才能让线程继续并启动其他功能 - 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做的一样

标签: c++multithreadingparallel-processingopenmp

解决方案


这听起来像是一个很好的案例#pragma omp single nowait

#pragma omp single指定一段代码应该由单线程(不一定是主线程)执行(来自this answer。

nowait子句防止其他线程等待写入的线程。


推荐阅读