2013-02-08 50 views
1

我正在寻找一种方法来使用boost线程并行运行代码块,而无需创建工作者函数或函子。我想要的东西类似于OpenMP的平行部分构造:并行部分与提升

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

有没有办法使用boost来实现这一点?

回答

2

如果您可以使用C++ 11,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(); 
}