我需要为通用任务实现一个线程池执行器。我的想法是使用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