2

私は並列プログラミングを実験しています。私は通常のループを持っています:

for (int i = 0; i < 100000; i++)
{
    Console.WriteLine("Thread ID: {0} and i is " + i + " Time Elapsed: " + sw.Elapsed,
        Thread.CurrentThread.ManagedThreadId);
}

このループは、数値を100000にインクリメントするだけです

このforループを使用してループに変換し、Parallel.For数値を100000までカウントしますが、すべてのCPUを並列に使用できますか?

また、を使用する場合、Parallel.For必要なパラメータは何ですか?非常に基本的な方法でどのように使用しますか?

4

3 に答える 3

10

Parallel.Forを使用する場合は、同期が必要です。ロックも使用している可能性があります。本当にParallel.Forを使用したい場合は、リンクをたどってください。Parallel.Forを美しく説明しています... http://msdn.microsoft.com/en-us/magazine/cc163340.aspx

それが役に立てば幸い

于 2010-09-16T05:29:03.940 に答える
1

私はこれがあなたが探しているものだと思います:

Parallel.For(0, 10000, i =>
{
   Console.WriteLine("Thread ID: {0} and i is " + i + " Time Elapsed: " + sw.Elapsed,
      Thread.CurrentThread.ManagedThreadId);
});
于 2010-09-16T04:28:26.913 に答える
1

これをParallel.Forループに変換して100000までカウントできますが、結果に満足できない可能性があります:)作業の分散にはかなりのオーバーヘッドが伴います。この場合、実行している作業は、マルチスレッドのオーバーヘッドを相殺するほど計算集約的ではありません。代わりに、Parallel.Forを使用することをお勧めします。これは、ループの本体が非常に計算集約的である場合(および他の反復に依存しない場合)です。

ただし、必要に応じてこれを行うこともできます。構文は次の形式です。

Parallel.For(0, 100000, (i) => { Console.WriteLine("Thread..."); });

また、出力は期待した順序にはならないことに注意してください:)

幸運を!!

于 2010-09-16T04:29:21.903 に答える