我如何显式线程任务?

时间:2013-10-07 12:11:31

标签: c++ multithreading openmp

假设我有两个功能:

Fun1();
Fun2();

这些函数是独立的,如果我可以并行运行它们(即,在一个线程上运行Fun1而在另一个线程上运行Fun2,则任务将得到改进。我正在使用Visual Studio 2012 - 所以打开MP 2.0

是否有直接方式(没有任何并行区域线程数测试或 for loop dodginess)来实现这一目标? OpenMP是否提供此类功能?

我尝试将paralleltask指令作为开始的地方,但我发现大部分文献都是incomprehensible并且找不到任何示例......

3 个答案:

答案 0 :(得分:5)

C ++ 11:

std::thread thread1(Fun1);
Fun2(); // runs on main thread
thread1.join(); // wait for completion

如果您没有C ++ 11,可以将std::thread替换为boost::thread并执行相同操作。

答案 1 :(得分:4)

您可以使用sections工作共享结构:

#pragma omp parallel sections
{
#pragma omp section
  Fun1();
#pragma omp section
  Fun2();
}

引自OpenMP 2.0 specifications(第2.4.2节):

  

sections指令标识了非迭代式工作共享   构造,指定要分割的一组构造   在团队中的线程之间。每个部分由一个线程执行一次   团队。

答案 2 :(得分:0)

是的,为什么不在它们周围使用本机线程或一些包装器?据我所知,Open MP比简单的线程运行工具更强大。当然,您可以将某个标志变量标记为共享或私有,并在并行编译指示内部检查它,或者使用schedule指令获取适当的结果(不记得所有OMP功能),但是......

  • 你只有几项任务
  • 这不是真正的并行计算,它不是某种原始线程池,只是与2个单线程中获取GUI和计算相同的问题
  • 您没有说过任何有关同步或复杂线程合作的内容

看起来你真的不需要Open MP。