我需要爲通用任務實現一個線程池執行器。我的想法是使用OpenMP進行線程管理。問題是,我不熟悉與OpenMP ..用OpenMP實現的ThreadPool
我試圖找到與OpenMP的通用ThreadPool的現有實現,但到目前爲止我還沒有找到一個。我想有到底是什麼非常相似java.util.concurrent.ThreadPoolExecutor
:
template <typename Return, typename Task>
class ThreadPoolExecutor
{
public:
ThreadPoolExecutor(int threadCount);
// asyncronous invoke
boost::unique_future<Return> submit(const TaskPtr & task);
// blocking call
std::vector<Return> invokeAll(const std::vector<TaskPtr> & tasks)
{
// submit all tasks + wait for completion
#pragma omp parallel default(shared)
{
// call tasks here
}
}
};
我對這個方法有幾個問題:
是否有存在的執行線程池的使用OpenMP的C++? [我知道我可以使用boost :: asio :: io_service實現線程池,但我不想依賴於它]
我的設計 - 我們如何保證OpenMP線程將由具體的「擁有」 ThreadPoolExecutor實例?它們不應該對所有實例都是靜態的。
感謝您對這種做法其他實現的&建議的任何意見&建設性的批評。
對於你的第二個問題,你不能將業主:不能。對openmp線程的管理是實現的工作。作爲旁註:爲什麼你需要基於openmp的實現?你看過(尚未官方)[boost線程池](http://threadpool.sourceforge.net/)嗎?或者[Intel TBB](http://threadingbuildingblocks.org/)? – Grizzly
恐怕OpenMP不適合這樣的任務... – Tudor
@Grizzly:謝謝。我知道TBB和增加線程池。但是我的項目是其他開發人員的圖書館,我不能輕鬆引入對這些產品的依賴關係。 OpenMP會很好,因爲它不需要額外的依賴關係。 – nogard