我需要为通用任务实现一个线程池执行器。我的想法是使用 OpenMP 进行线程管理。问题是我还不熟悉 OpenMP ..
我试图用 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 for C++ 的线程池实现?[我知道我可以使用 boost::asio::io_service 实现线程池,但我不希望依赖它]
使用我的设计 - 我们如何保证 OpenMP 线程将由具体的 ThreadPoolExecutor 实例“拥有”?它们不应该对所有实例都是静态的。
感谢您对此方法的任何建议和建设性批评以及其他实现的建议。