mam ten kod:szereg wątków C#
Thread[] threadsArray = new Thread[4];
for (int i = 0; i < 4; i++)
{
threadsArray[i] = new Thread(() => c1.k(i));
}
for (int i = 0; i < 4; i++)
{
threadsArray[i].Start();
}
for (int i = 0; i < 4; i++)
{
threadsArray[i].Join();
}
funkcja k jest taka:
void k(int i)
{
while(true)
Console.WriteLine(i);
}
z jakiegoś powodu po prostu ostatni wątek jest uruchomiony i drukowanie 4444444 .... dlaczego czy wszystkie wątki nie działają?
To musi być najbardziej dziwak wariant standardowy zamykanie-over-the-loop-zmienna pytanie, jaki kiedykolwiek widziałem. –
Ten jest jeszcze bardziej podobny: http://stackoverflow.com/questions/1930133/c-closures-why-is-the-loopvariable-captured-by-reference –
Powiązane: "Zamknięcie zmiennej pętli za szkodliwe" przez Eric Lippert. http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx –