[英]ThreadPool implemented with OpenMP
我需要为通用任务实现一个线程池执行器。 我的想法是使用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实现threadpool,但我宁愿不依赖它]
通过我的设计 - 我们如何保证OpenMP线程将由具体的ThreadPoolExecutor实例“拥有”? 对于所有实例,它们不应该是静态的。
感谢您对此方法的任何建议和建设性批评以及其他实现的建议。
总结一下:如评论中所述,OpenMP不是实现通用线程池或执行器的选项,因为:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.