1

我正在寻找一种使用 boost 线程并行运行代码块而不创建工作函数或仿函数的方法。我想要类似于 OpenMP 的并行部分构造的东西:

#pragma omp parallel sections
{
   #pragma omp section
   {
      ... do some work
   }
   #pragma omp section
   {
      ... do some more
   }
}

有没有办法使用boost来完成这个?

4

1 回答 1

2

如果您可以使用 C++11,则lambda表达式将很有用。(lambda 实际上是一种仿函数,但下面的代码看起来像 OpenMP 版本?)

#include <boost/thread.hpp>

{
  boost::thread th1([&]() {
    // ... do some work (thread#1)
  });
  boost::thread th2([&]() {
    // ... do some more (thread#2)
  });
  // wait for two tasks completion
  th1.join();
  th2.join();
}

thread_group版本:

{
  boost::thread_group pool;
  pool.create_thread([&]() {
    // ... do some work (thread#1)
  });
  pool.create_thread([&]() {
    // ... do some more (thread#2)
  });
  // wait for two tasks completion
  pool.join_all();
}
于 2013-02-16T07:56:46.073 回答