2013-02-08 52 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(); 
}