static void Main(string[] args)
{
int i = 10;
Program th = new Program();
Thread t2 = new Thread(() => thread2(out i));
t2.Start();
Thread t1 = new Thread(() => thread1(i));
t1.Start();
Thread.Sleep(5000);
Console.WriteLine("Main thread exits." + i);
Console.ReadLine();
}
static void thread1(int i)
{
Console.WriteLine(i);
i = 100;
}
static void thread2(out int i) // what should be the value of i???
{
Thread.Sleep(5000);
i = 21;
Console.WriteLine(i);
}
当我们传递参数时,在被调用方法中收到的值应该是什么? "它是否为零或我们传递的值"
答案 0 :(得分:0)
基于您的代码
static void Main(string[] args)
{
int i = 10;
Program th = new Program();
Thread t2 = new Thread(() => thread2(out i));
t2.Start();
Thread t1 = new Thread(() => thread1(i));
t1.Start();
Thread.Sleep(5000);
Console.WriteLine("Main thread exits." + i);
Console.ReadLine();
}
第一个函数thread2将接收值i = 10
。但是
在第二个函数中,您将收到i =10 or i =21
,因为它全部取决于在CLR / CPU级别执行的执行。
我在这里要说的是,如果你thread2()
方法执行在执行thread1()
之前完成,那么thread1()
将会收到21
。但如果没有完成执行,则接收10
作为输入。
Thread.Sleep(5000);
函数中删除此行thread2()
,则上述情况属实。
但是如果在理想情况下你不会将10传递给函数和主线程打印10,但这也取决于上下文切换...你的输出在这里没有修复。这一切都在处理和执行上。