多线程-Lock

今天写了一段测试Lock的代码,以下:测试

namespace TLock
{
    class Program
    {
        static void Main(string[] args)
        {
            TMyThread myThread = new TMyThread();
            myThread.StartThread();
        }
    }

    class TMyThread
    {
        private int i = 0;  //共享变量
        private Object lockFlag = new Object();
        public void StartThread()
        {
            for(int j = 0; j<4; j++)
           {
                Thread thread = new Thread(ThdMethod);
                thread.Start();
           }
        }
        
        private void ThdMethod()
        {
            Thread.Sleep(1000);
            while (true)
            {
                //lock(i),会直接报以下错误:int 不是lock要求引用的类型
                lock (lockFlag)
                {
                    i++;
                    Console.WriteLine(i);
                    if(i > 100)
                    {                       
                        break;
                    }
                }
            }
            Console.ReadKey();
        }
    }
}

运行结果以下:spa

为何会有大于100的记录呢?线程

缘由是,每一个线程都有本身独立的堆栈。当线程1将i写成101,进入if语句,线程1中止,而后线程2进入lock,会在线程1的基础上,再加1而后中止循环,以此类推,因此会存在多出来的3个。code

相关文章
相关标签/搜索