Je possède ce code:de threads 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();
}
la fonction k est la suivante:
void k(int i)
{
while(true)
Console.WriteLine(i);
}
pour une raison que le dernier fil est en cours d'exécution et l'impression 4444444 .... pourquoi les threads ne sont-ils pas tous en cours d'exécution?
Ce doit être la variante la plus absconse de la norme fermeture sur la boucle variable question que j'ai jamais vu. –
Celui-ci est encore plus similaire: http://stackoverflow.com/questions/1930133/c-closures-why-is-the-loopvariable-captured-by-reference –
Connexe: "Fermeture sur la boucle variable considérée comme nuisible" par Eric Lippert. http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx –