for (int i = 0; i < 10; i++)
new Thread (() => Console.Write (i)).Start();
正如预期的那样,上述代码的输出是不确定的,因为 i 变量在循环的整个生命周期中引用相同的内存位置。因此,每个线程都会在一个变量上调用 Console.Write,该变量的值可能会在运行时发生变化
然而,
for (int i = 0; i < 10; i++)
{
int temp = i;
new Thread (() => Console.Write (temp)).Start();
}
也给出了非确定性的输出!我认为变量 temp 是每个循环迭代的本地变量。因此,每个线程捕获了不同的内存位置,应该存在 np 问题。