首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-10-27 
一个关于C#线程的低级问题class Program{static private bool donestatic void Main(string[] args){Thre

一个关于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");
            }
        }
    }

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

热点排行