2013-07-31 30 views
2

我有一堆並行任務要完成,但只有一些工作線程(說8,但我希望這是可配置的)。C++中的線程池和執行隊列11

因此,只要隊列中有任務,就有8個線程運行,並且每個線程都會從隊列中彈出下一個任務。

C++ 11是否提供了任何內置的構造來幫助實現這種設計?

我看到一些與std::async有關的類似討論,但是我認爲這對編譯器的實現有很大的影響。

回答

2

如果你願意,你可以有std::vector<std::thread>,但你必須在C++ 11中實現你自己的池和工作隊列。

如果你想要通用的線程池實現,然後Boost.Asio包含一個。您只需從幾個線程中設置io_service::run()來設置一個線程池,然後可以使用io_service::post()給出池的工作。相當乾淨,簡單和通用只有名稱io_service混淆如果你做的工作不是I/O相關。

2

如果你的意思是一個線程池,C++ 11沒有提供線程池,你還必須決定是否要在你的線程模型中用C++ 11來使用原子,互斥或fences,如果你正在尋找可以開箱即用的解決方案,唯一真正的解決方案AFAIK是英特爾TBB庫。還有一個非官方的線程池庫,但看起來不太流行或活躍。