2011-07-08 9 views
-2

スレッドを使用して1つのプログラムを複数回実行しようとしています(コア全体に負荷が分散しています)。私は2つのコアを持っているので、2つのスレッドを作る必要があります。また、あるスレッドが終了すると、そのスレッドを再実行して実行する必要があります。私はこのことをどうやって失われたのでしょうか?複数のコアでプログラムを実行する際のいくつかの質問

+0

どの部分に問題がありますか? 2つの 'スレッド'を作成し、それぞれにいくつかの作業をさせます。おそらく彼らは 'Queue'から仕事の項目を取ることができました。スレッドはどのような作業をしていますか? –

+0

プログラムを実行します。したがって、2つのスレッドを持つことによって、2つの異なるコア上で.exeを実行します。私は、スレッドプールを使用する必要がありますか? 2つのスレッドを作成するだけですか? 2つのスレッドを作成した場合、どのスレッドが終了したかをどのように知ることができますか? –

+0

@Joey G - スレッド上で 'join'を使うと、結合されたスレッドが終了するまでコードがブロックされます。 [これを参照してください](http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx) – Grambot

答えて

5

自分でスレッド管理コードを書き込もうとしないでください。 Task Parallel Libraryを使用してください。それはまさにそのためのものです。

あなたが質問しているところでは、スレッドの仕組みをよく理解していないと思われます。スレッドをプロセスと混同しているかもしれません。あなたのプログラムがより詳しく作業していることを説明できますか?複数のプロセスを使用することは正しい方法かもしれませんが、複数のスレッドで1つのプロセスを使用する可能性が高いようです。

+0

申し訳ございません。何千回も実行したいプログラムがあるとします。ループを使用して実行をスレッドに割り当てて、コア全体に分散されるようにして、連続して実行するのではなく高速に実行するようにしたかったのです。 –

+2

@Joey:TPLはその仕事のために設計されています。ただし、プログラムが "困惑して並列化可能"でないと、並列化が役に立たない可能性があり、実際には遅くなる可能性があることに注意してください。一部のジョブは本質的に並列化が容易です。数千の画像を分析し、ゴールデンゲートブリッジやエッフェル塔の写真であることを確認しようとしている場合は、各コアで500枚の画像を作成するのが良い考えです。あなたが* 1つの*イメージを分析しているなら、1つのコアで左半分を行い、別のコアで右から行うことは*ひどい*アイデアです。 –

関連する問題