public static void DisplayNumber()
        {
            Thread.Sleep(1);//这里暂时叫S1吧
            Console.WriteLine(Thread.CurrentThread.Name + " START");
            for (int i = 0; i <= 10; i++)
            {
                Console.WriteLine(Thread.CurrentThread.Name + " " + i);
            }
            Thread.Sleep(1);//这里叫S2
        }        static void Main(string[] args)
        {
            Thread myThread = new Thread(DisplayNumber);
            myThread.Name = "myThread";
            myThread.Start();
            myThread.Suspend();
            Thread.CurrentThread.Name = "MainThread";
            DisplayNumber();
            myThread.Resume();
            Console.ReadKey();
        }
问题:1、打开S1.注释掉S2.。会显示什么?是不是绝对每次都会显示?
      会不会发生这种情况。子线程休息了1毫秒,但是接下来CPU资源分配给了系统的其他进程,等子线程恢复的时候,主线程依然没有获得CPU资源。导致子线程继续运行。
      2、注释掉S1,打开S2.会显示什么?是不是绝对的。

解决方案 »

  1.   

    不确定的东西,纯粹是浪费时间。      会不会发生这种情况。子线程休息了1毫秒,但是接下来CPU资源分配给了系统的其他进程,等子线程恢复的时候,主线程依然没有获得CPU资源。导致子线程继续运行。 
    ------------------------------------------
    你知不知道一毫秒的时间内,计算机可以多少条指令?要知道不管调度算法如何,不会长时间地让某个进程某个线程一直不能获得CPU时间的,略微成熟的算法都会避免饿死现象的发生。