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

C# 多线程执行过程探讨
上代码说明问题

    class Program
    {
        static Thread t1 = new Thread(new ThreadStart(Run1));
        static Thread t2 = new Thread(new ThreadStart(Run2));
        static NetworkStream ns = null;
        static byte[] data1 = new byte[99999];
        static byte[] data2 = new byte[99999];

        static void Main(string[] args)
        {
            for (int i = 0; i < data1.Length; i++)
            {
                data1[i] = 1;
            }
            TcpClient client = new TcpClient("127.0.0.1", 8855);
            ns = client.GetStream();
            t1.Start();
            t2.Start();
        }

        static void Run1()
        {
            int i=100;//无意义
            ns.Write(data1, 0, data1.Length);
        }
        static void Run2()
        {
            int i=1000;//无意义
            ns.Write(data2, 0, data2.Length);
        }
    }

大家有看到,Run1方法和Run2方法是在t1线程和t2线程中执行的
而且这2个线程是操作的同一个NetworkStream
我的问题是按照多线程的效果,Run1和Run2同时开始执行了。
他可能是执行Run1里面的int i=100。然后执行完了后就跳到Run2里面去执行Run2里面的int i=1000
当然也可能不跳,继续执行下面的一行代码,具体实际是怎样,得看cpu调度了。
我自己的代码,我知道我都写了哪些行代码,在交替执行的时候可能会执行哪些代码我都知道。
这一切都在我的掌控之中。
但是ns.Write这个方法不是我写的,是.Net Framework里面的方法,它的内部有哪些代码我也不知道。