lock (o)
                    {
                        oi = oii++;
                        if (oi >= 100)
                        {
                            oi = 0;
                            oii = 1;                        }
                    }
=======================================================
这个lock是多线程方法里的一部分,目的是想循环输出0~99这个数字。。不知道这样写对不对,代码可否改成比这样高效的,更利于并发多线程的呢?

解决方案 »

  1.   

    这是以前写的class ThreadDemo 
        {         static object a = new object(); 
            static object b = new object(); 
            static int i = 100; 
            static int j = 0; 
            public static void Main() 
            { 
                //Stopwatch sw = new Stopwatch(); 
                List <Thread> ThreadList = new List <Thread>(10); 
                Thread tmp; 
                for (int i = 1; i <= ThreadList.Capacity; i++) 
                {                
                    tmp = new Thread(new ThreadStart(Process)); 
                    tmp.Name = "线程" + i; 
                    ThreadList.Add(tmp);              
                } 
                foreach (Thread SingleThread in ThreadList) 
                    SingleThread.Start(); 
                Console.ReadKey();         } 
            static private void Process() 
            { 
                while (i > 0) 
                { 
                    lock (a) 
                    { 
                        if (i > 0) 
                        { 
                            i--; 
                            Console.WriteLine(Thread.CurrentThread.Name + "减1 ====> i = " + i); 
                        } 
                    } 
                } 
            }         static private void Process2() 
            { 
                while (j < 10) 
                { 
                    lock (a) 
                    { 
                        if (j <10 ) 
                        { 
                            j++; 
                            Console.WriteLine(Thread.CurrentThread.Name + "加1 ====> j = " + j); 
                        } 
                    } 
                } 
            } 
        } 执行结果
    由于资源的抢占和线程的CPU调度,每次运行的结果会不一样~下面给一个运行结果: 
    线程2减1 ====> i = 99 
    线程4减1 ====> i = 98 
    线程4减1 ====> i = 97 
    线程4减1 ====> i = 96 
    线程4减1 ====> i = 95 
    线程4减1 ====> i = 94 
    线程4减1 ====> i = 93 
    线程4减1 ====> i = 92 
    线程4减1 ====> i = 91 
    线程4减1 ====> i = 90 
    线程4减1 ====> i = 89 
    线程4减1 ====> i = 88 
    线程4减1 ====> i = 87 
    线程4减1 ====> i = 86 
    线程4减1 ====> i = 85 
    线程4减1 ====> i = 84 
    线程4减1 ====> i = 83 
    线程4减1 ====> i = 82 
    线程4减1 ====> i = 81 
    线程4减1 ====> i = 80 
    线程4减1 ====> i = 79 
    线程4减1 ====> i = 78 
    线程4减1 ====> i = 77 
    线程4减1 ====> i = 76 
    线程4减1 ====> i = 75 
    线程4减1 ====> i = 74 
    线程4减1 ====> i = 73 
    线程4减1 ====> i = 72 
    线程4减1 ====> i = 71 
    线程4减1 ====> i = 70 
    线程2减1 ====> i = 69 
    线程2减1 ====> i = 68 
    线程2减1 ====> i = 67 
    线程2减1 ====> i = 66 
    线程2减1 ====> i = 65 
    线程2减1 ====> i = 64 
    线程2减1 ====> i = 63 
    线程2减1 ====> i = 62 
    线程2减1 ====> i = 61 
    线程2减1 ====> i = 60 
    线程2减1 ====> i = 59 
    线程2减1 ====> i = 58 
    线程2减1 ====> i = 57 
    线程2减1 ====> i = 56 
    线程2减1 ====> i = 55 
    线程5减1 ====> i = 54 
    线程5减1 ====> i = 53 
    线程5减1 ====> i = 52 
    线程4减1 ====> i = 51 
    线程3减1 ====> i = 50 
    线程3减1 ====> i = 49 
    线程6减1 ====> i = 48 
    线程6减1 ====> i = 47 
    线程6减1 ====> i = 46 
    线程6减1 ====> i = 45 
    线程6减1 ====> i = 44 
    线程4减1 ====> i = 43 
    线程4减1 ====> i = 42 
    线程4减1 ====> i = 41 
    线程4减1 ====> i = 40 
    线程4减1 ====> i = 39 
    线程4减1 ====> i = 38 
    线程4减1 ====> i = 37 
    线程4减1 ====> i = 36 
    线程4减1 ====> i = 35 
    线程4减1 ====> i = 34 
    线程4减1 ====> i = 33 
    线程4减1 ====> i = 32 
    线程4减1 ====> i = 31 
    线程4减1 ====> i = 30 
    线程4减1 ====> i = 29 
    线程4减1 ====> i = 28 
    线程4减1 ====> i = 27 
    线程4减1 ====> i = 26 
    线程4减1 ====> i = 25 
    线程2减1 ====> i = 24 
    线程6减1 ====> i = 23 
    线程8减1 ====> i = 22 
    线程8减1 ====> i = 21 
    线程8减1 ====> i = 20 
    线程8减1 ====> i = 19 
    线程8减1 ====> i = 18 
    线程8减1 ====> i = 17 
    线程8减1 ====> i = 16 
    线程8减1 ====> i = 15 
    线程8减1 ====> i = 14 
    线程8减1 ====> i = 13 
    线程8减1 ====> i = 12 
    线程8减1 ====> i = 11 
    线程8减1 ====> i = 10 
    线程8减1 ====> i = 9 
    线程8减1 ====> i = 8 
    线程8减1 ====> i = 7 
    线程8减1 ====> i = 6 
    线程8减1 ====> i = 5 
    线程8减1 ====> i = 4 
    线程10减1 ====> i = 3 
    线程4减1 ====> i = 2 
    线程5减1 ====> i = 1 
    线程7减1 ====> i = 0