簡體   English   中英

ThreadPool用OpenMP實現

[英]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
        }
    }
};

我有幾個關於這種方法的問題:

  1. 是否存在使用OpenMP for C ++的線程池實現? [我知道我可以用boost :: asio :: io_service實現threadpool,但我寧願不依賴它]

  2. 通過我的設計 - 我們如何保證OpenMP線程將由具體的ThreadPoolExecutor實例“擁有”? 對於所有實例,它們不應該是靜態的。

感謝您對此方法的任何建議和建設性批評以及其他實現的建議。

總結一下:如評論中所述,OpenMP不是實現通用線程池或執行器的選項,因為:

  1. OpenMP嚴格來說是一個fork / join線程模型。
  2. 您無法為OpenMP線程分配所有者
  3. 無法控制線程和內部線程池

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM