2016-12-30 85 views
1

是否有任何方法來設置可以通過使用異步函數(從未來)創建的最大線程數量? 我更喜歡使用async/future.get,因爲它可以轉換爲同步/產生多任務模型,這在Alghoritms(即Cormen)的教科書中是常見的 。我希望能夠獲得T [p](使用p處理器/線程完成程序的時間)。使用C++異步並行編程async

+0

如果對成員函數的調用次數高於您在構建類實例時可能指定的某個限制,那麼您可以將所有調用放入類中的方法中,以避免執行任何操作。如果達到或超過限制,您希望程序執行什麼操作? –

+0

快速且骯髒的解決方案:將信號量初始化爲您希望一次執行的線程數。讓你的線程程序等待這個信號量。這並不能讓你擺脫線程創建的開銷,但至少任何額外的線程都會安靜地轉動。 – Davislor

+0

或者:有一個原子(優先級)隊列,並讓你的池中的工作線程從隊列中獲得他們的下一個任務,但你已經表示你寧願做同步/產生。 – Davislor

回答

2

不幸的是沒有。 std::async在它爲您提供如何創建線程的控件上的聲名遠播受到限制。

您可能會考慮使用boost線程池。這是(有點直觀上)boost asio的一部分,並使用一個io_service對象,即使/如果您實際上沒有將它用於I/O。

使用此功能可以很容易地控制使用的線程數量,包括只使用一個。

當然,您可以從標準組件構建您自己的線程池類。當然可能,但不是完全平凡的任務。