Im folgenden Beispiel scheint es, dass der Index i
der for-Schleife, die durch jeden Thread unabhängig modifiziert ist auf fremde Werte i
führenden (Multiples, auch Werte größer als System.Environment.ProcessorCount-1
) in DoWork_Threaded()
Threading in C#: Wie wird der Loop-Index Thread-sicher gehalten?
Wie werden multithreaded Schleifen richtig in C# gemacht?
// 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();
}
Vielen Dank für Ihre Antwort, aber wie würde dies mit dem Index ich helfen? PS: Es funktioniert auch nicht. –
versuchen, den Wert innerhalb der Schleife zu kopieren 'int a = i;' dann 'DoWork_Threaded (a);' – user3185569
Für einige Erklärung, warum Ihr Code sich verhält, können Sie https://blogs.msdn.microsoft.com/ lesen ericlippert/2009/11/12/closing-over-the-loop-variabel-als-schädlich /. Es ist auch völlig unabhängig von Threading. Irgendwelche Schließungs-Schleifen-Variablen können das von Ihnen beschriebene Verhalten verursachen. – Dirk