2016-12-30 23 views
1

(将来の)非同期関数を使用して作成できるスレッドの最大量を設定する方法はありますか? 私はsync/spawnマルチタスクモデルに変換できるので、async/future.getを使うのが好きです.Alghoritms(つまりCormen)の教科書には普通の です。私はT [p](pプロセッサ/スレッドを使ってプログラムを終了する時間)を得ることができるようにしたい。C++ asyncを使用した並列プログラミング

+0

メンバー関数への呼び出し回数が、クラスのインスタンスを構築するときに指定できる制限よりも高い場合、何もしないクラスのメソッドにasyncを呼び出すことができます。制限に達するか超過したら、あなたのプログラムは何をしたいですか? –

+0

すばやく解決策:一度に処理できるスレッド数にセマフォを初期化します。あなたのスレッドプロシージャをそのセマフォを待ちます。スレッド作成のオーバーヘッドから解放されるわけではありませんが、余分なスレッドは少なくとも静かに回転します。 – Davislor

+0

また、アトミック(優先順位)キューを用意し、プール内のワーカースレッドにキューから次のタスクを取得させることもできますが、すでに同期/スポーンを実行すると言いました。 – Davislor

答えて

2

残念ながら、 std::asyncは、スレッドがどのように作成されるかをあなたに知らせるコントロールでかなり有名に限られています。

代わりに、ブーストスレッドプールの使用を検討することもできます。これはboost asioの(やや直観的に)部分ですが、実際にI/Oに使用していない場合でも、io_serviceオブジェクトを使用します。

これを使用すると、使用するスレッドの数を1つだけ使用するなど、制御するのはかなり簡単です。

もちろん、標準コンポーネントから独自のスレッドプールクラスを構築できます。確かに可能ですが、まったく些細なことではありません。

関連する問題