【发布时间】:2013-07-20 09:37:12
【问题描述】:
我在网上看到一段代码,指出调用这样的线程会导致不确定的输出“0223557799”或类似的东西。(你明白了)
for (int i = 0; i < 10; i++)
new Thread (() => Console.Write (i)).Start();
这是给出的原因:
“问题在于 i 变量在循环的整个生命周期中都指向同一个内存位置。因此,每个线程都会调用 Console.Write 变量,其值可能会在运行时发生变化!”
但是,按照惯例,当参数按值传递时 - 每个新的 Thread 调用都应该发送 i 其增量顺序对吗?只有当值通过引用传递时,上述原因才成立。那么,在 C# 多线程中,值是通过引用传递的吗?
我是C#的新手,如果这个问题很幼稚,请理解。
【问题讨论】:
-
int temp = i;将它放在循环中并传递温度,slaks 是对的。
标签: c# multithreading variables memory-management pass-by-reference