C# Lock鎖(個人隨記)


先看看為什么要用鎖
需求:多線程處理值的加減
 
        static int NoLockData = 0;

        public static void NoLockNormalTest(int threadIndex)
        {
            
            while (true)//這是腦殘設計,while(true)
            {
                //lock (lockNormal)
                {
                    NoLockData++;
                    Debug.Print("{0}無鎖狀態的+值{1}", threadIndex, NoLockData);
                    NoLockData--;
                    Debug.Print("{0}無鎖狀態的-值{1}", threadIndex, NoLockData);
                }
                Thread.Sleep(1);//讓我們養成良好習慣,每一個while都要休息下
            }
        }    

  

            new Thread(() =>{ NoLockNormalTest(1); }){ IsBackground=true}.Start();
            new Thread(() =>{ NoLockNormalTest(2); }){ IsBackground=true}.Start();
            new Thread(() =>{ NoLockNormalTest(3); }){ IsBackground=true}.Start();
            new Thread(() =>{ NoLockNormalTest(4); }) { IsBackground=true}.Start();           

  

 

這個時候值是亂的

 

引入第一種鎖lock

 /// <summary>
        /// 聲明一個應用object變量,不能值變量,別問,問就是object變量,養成習慣,static 是因為我在控制台
        /// </summary>
        private static object lockNormal = new object();
public static void LockNormalTest(int threadIndex)
        {
            while (true)//這是腦殘設計,while(true)
            {
                lock (lockNormal)
                {
                    NoLockData++;
                    Debug.Print("{0}無鎖狀態的+值{1}", threadIndex, NoLockData);
                    NoLockData--;
                    Debug.Print("{0}無鎖狀態的-值{1}", threadIndex, NoLockData);
                }
                Thread.Sleep(1);//讓我們養成良好習慣,每一個while都要休息下
            }
        }

  

 

 

這個時候值是穩定的大家都在無序被鎖控制

 

 

 很簡單把,使用注意點,要鎖的話必須同一個變量  

public static object lockData=new  object();
lock(lockData)
{
    //這里面處理事情
}
 
 
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM