我有这样的代码:阵列线程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();
}
功能k是这样的:
void k(int i)
{
while(true)
Console.WriteLine(i);
}
出于某种原因刚刚过去的线程运行并打印4444444 .... 为什么并不是所有线程都在运行?
这必须是标准的闭合过度的循环变量是我见过的问题的最古怪的变种。 – 2010-07-19 20:51:36
这一个更类似:http://stackoverflow.com/questions/1930133/c-closures-why-is-the-loopvariable-captured-by-reference – 2010-07-19 21:06:58
相关:“关闭循环变量被认为是有害的”由Eric Lippert。 http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx – 2010-07-20 07:56:51