我在网上看到一段代码,它声称像这样调用线程会导致不确定的输出,如“0223557799”之类的(你懂的)。
这是给出的原因:
“问题在于i变量在整个循环期间都指向同一内存位置。因此,每个线程在运行时调用Console.Write时会对一个值可能会改变的变量进行操作!”
但是,按照惯例,当按值传递参数时,每个新的Thread调用都应该将i作为其增量顺序发送,对吗?只有如果值是通过引用传递的,上述原因才成立。那么,在C#多线程中,值是按引用传递的吗?
我是新手,请理解如果问题比较幼稚。
for (int i = 0; i < 10; i++)
new Thread (() => Console.Write (i)).Start();
这是给出的原因:
“问题在于i变量在整个循环期间都指向同一内存位置。因此,每个线程在运行时调用Console.Write时会对一个值可能会改变的变量进行操作!”
但是,按照惯例,当按值传递参数时,每个新的Thread调用都应该将i作为其增量顺序发送,对吗?只有如果值是通过引用传递的,上述原因才成立。那么,在C#多线程中,值是按引用传递的吗?
我是新手,请理解如果问题比较幼稚。