2016-12-12 13 views
0

私はN個のジョブのプールを持っており、M(= CPUの数)スレッドの一定の負荷が必要です。 C++でどうすればいいですか?C++マルチスレッド:スレッドの管理

私はすでにC++のスレッドライブラリの基礎を知っています。最も簡単な方法は、M個のジョブをエンキューし、すべてが終了するのを待つことです。次に、別のMジョブをエンキューします。仕事が残っている限りこれを行います。

この単純なアプローチは、各ジョブ/スレッドの時間がほぼ同じであれば問題ありません。これが当てはまらない場合、他のすべてのスレッドが終了している間に1つの長いスレッドがまだ動作していることは容易に起こります。これにより、M個のCPUのうちの1つだけがロードされる。

私はスレッド管理の種類が必要です。すべてのスレッドを待つ代わりに、必要に応じて、実行中のスレッドの数と新しいスレッドをエンキューすることを常に確認する必要があります。

C++に既に実装されているものはありますか?さもなければ、そのようなマネージャーを実装する最も簡単でスマートな方法は何でしょうか?

+2

スレッドプールについて読むと、C++にたくさんのものがあります –

+0

あなたの問題は複数の解決策があります。それらのうちの1つは自己管理スレッドを提供することであり、スレッドの1つが自分の仕事を終了したときにはジョブリストからジョブを処理しないようにします。あなたが覚えておく必要があることの1つは、仕事を取るための重要なセクションを実行することです。 – Logman

+0

最初にN個のスレッドを開始し、すべてのスレッドをアプリケーション全体で実行させます。次に、各スレッドは、条件変数、セマフォー、またはバウンドバッファー、または処理する項目を持つキューを待ってループします。 –

答えて

0

私はスレッド管理の種類が必要です。すべてのスレッドを待つ代わりに、必要に応じて、実行中のスレッドの数と新しいスレッドをエンキューすることを常に確認する必要があります。

C++に既に実装されているものはありますか?

ユーザータスクを非常に効率的な方法で使用可能なCPUにロードバランシングするTask Scheduler in Intel Thread Building blocks libraryがあります。

関連する問題