读书人

一个关于C#线程的低级有关问题

发布时间: 2013-10-27 15:21:50 作者: rapoo

一个关于C#线程的低级问题
class Program
{
static private bool done;
static void Main(string[] args)
{
Thread t = new Thread(Go);
t.Start();
Go();
}
static void Go()
{
//Console.WriteLine("1");
if (!done)
{
Console.WriteLine("Done");
done = true;
Console.WriteLine("2");
}
}
}
该程序的运行结果是
Done
2
Done
2
如果去掉注释,运行结果就变成:
1
Done
2
1
求解释为什么?
线程 c#
[解决办法]
第二次 done= true了
[解决办法]

引用:
Quote: 引用:

第二次 done= true了

那为什么注释了输出结果会有2个Done;第二次done 不也是应该变成true了么?

应该是线程的调用顺序不同导致的。因为线程是由操作系统调度,每次哪个线程在前面可以不同。

你把代码改成
class Program
{
static private bool done;
static void Main(string[] args)
{
//Thread t = new Thread(Go);
// t.Start();
Go();
Go();
Console.ReadLine();
}
static void Go()
{
// Console.WriteLine("1");
if (!done)
{
Console.WriteLine(done.ToString());
done = true;
Console.WriteLine("2");
}
}
}

看看运行结果 就知道了。
[解决办法]
线程的执行顺序,有时间去查查资料

读书人网 >C#

热点推荐