は、forループのインデックスi
が正しくループをマルチスレッド化された方法DoWork_Threaded()
C#でのスレッディング:ループインデックスをスレッドセーフにするには?次の例では
に(さえSystem.Environment.ProcessorCount-1
より大きい値、倍数)i
の奇妙な値に至る各スレッドによって独立して修飾されると思われますCで行われた#?
// Prepare all threads
Thread[] threads = new Thread[System.Environment.ProcessorCount];
// Start all threads
for (int i = 0; i < System.Environment.ProcessorCount; i++)
{
threads[i] = new Thread(() => DoWork_Threaded(i));
threads[i].Start();
}
// Wait for completion of all threads
for (int i = 0; i < System.Environment.ProcessorCount; i++)
{
threads[i].Join();
}
回答ありがとうございますが、これはインデックスiでどのように役立ちますか? PS:それはまた働いていません。 –
ループ内の値をコピーしようとしました 'int a = i;' DoWork_Threaded(a); – user3185569
コードがどのように振舞うのかについては、https://blogs.msdn.microsoft.com/を参照してください。 ericlippert/2009/11/12/closed-over-the-loop-variable-considered-有害な/。スレッド化とはまったく無関係です。ループ変数をクロージャーすると、記述した動作が発生する可能性があります。 – Dirk