c++ - 使用 OpenMP 实现的线程池

标签 c++ multithreading concurrency threadpool 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
        }
    }
};

我对这种方法有几个问题:

  1. 是否有用于 C++ 的 OpenMP 线程池的现有实现? [我知道我可以使用 boost::asio::io_service 实现线程池,但我不想依赖它]

  2. 根据我的设计 - 我们如何保证 OpenMP 线程将由具体的 ThreadPoolExecutor 实例“拥有”?它们不应该对所有实例都是静态的。

感谢您对此方法的任何建议和建设性批评以及其他实现方案的建议。

最佳答案

总结一下:如评论中所述,OpenMP 不是实现通用线程池或执行程序的选项,因为:

  1. OpenMP 严格来说是一个 fork/join 线程模型。
  2. 您不能为 OpenMP 线程分配所有者
  3. 无法控制线程和内部线程池

关于c++ - 使用 OpenMP 实现的线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12370942/

相关文章:

c++ - 纹理映射导致纹理中 1 个像素的纯色

c++ - 函数 Simd::Fill() 的奇怪行为

c# - 如何在 c# .net 中阻止一个方法直到另一个方法执行

python - 在 Python 中并发运行外部程序

http - 使用 HTTP 请求上下文管理 channel

C++ 获取缓冲区的二进制值

c++ - 导出到 MeshLab 上的 STL 不再是文本文件

multithreading - C++ std::mutex和Windows CreateMutex有什么区别

python - 守护线程启动软件不会死

concurrency - 使用并发语句实现触发器