日期:2014-05-17  浏览次数:20799 次

C#中的线程为何会被抢占?
C# code

using System;
using System.Threading;
public class ThreadExample
{
    public static void ThreadProc()
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine("ThreadProc: {0}", i);
       
        }
    }
    public static void Main()
    {

        Console.WriteLine("Main thread: Start a second thread.");
        Thread t = new Thread(new ThreadStart(ThreadProc));
        t.Start();
        for (int i = 0; i < 4; i++)
        {
            Console.WriteLine("Main thread: Do some work.");
            Thread.Sleep(0);
        }
        Console.Read();
    }
}


运行结果

我想问下既然Windows是抢占式多任务系统,那么应该在ThreadProc()抢到CPU后就会让它一直执行下去,直到它自身想停下来(如等待输入等)或运行结束为止,可是为什么在上面的程序中还是让Main Thread给抢占了呢?

------解决方案--------------------
探讨
我想问下既然Windows是抢占式多任务系统,那么应该在ThreadProc()抢到CPU后就会让它一直执行下去,直到它自身想停下来(如等待输入等)或运行结束为止,可是为什么在上面的程序中还是让Main Thread给抢占了呢?

------解决方案--------------------
楼主你确认自己真的知道 抢占式多任务系统 是什么意思吗?
抢到了就不放?那不就是最简单的串行执行吗,还要线程干嘛
------解决方案--------------------
OMG,线程的原理--------------百度之--------------
------解决方案--------------------
如果必须先执行完这个线程,这样有死循环线程就只能关电源了,windows就不能叫多任务系统了。
而且main线程能被抢,ThreadProc当然也能被抢。

现在都是多核cpu,单核运行说不定不会这样。