程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Lock的用法,為什麼要用?,Lock用法,

Lock的用法,為什麼要用?,Lock用法,

編輯:C#入門知識

Lock的用法,為什麼要用?,Lock用法,


當多個進程分享數據的時候,對某段程序代碼要lock(當對分享數據進行改寫的時候)。

我們先看些這段代碼:

namespace ThreadTest
{
    class Program
    {
        static bool done;
        static void Main(string[] args)
        {
            new Thread(Go).Start();
            Go();                    
            Console.ReadKey();
        }
        static void Go()
        {
            if (!done)
            {
                done = true;
                Console.WriteLine("Done");
            } 
}
}
}

字段“Done”是兩個進程分享的,所以結果輸出一個“Done”;但是我們如果把兩句程序顛倒一下:

        static void Go()
        {
            if (!done)
            {
                Console.WriteLine("Done");
                done = true;
            }
        }

一個進程還沒來得及把"done"設置為true的時候,另一個進程可能已經輸出了,這就大大的加大了輸出兩個Done的可能性。

 

所以,我們需要lock,當給共享變量賦值的時候,可以給程序鎖住,這樣另一個進程就只能等待,直到lock解除。

        static bool done;
        static readonly object locker = new object();
        static void Main(string[] args)
        {
            new Thread(Go).Start();
            Go();                    
            Console.ReadKey();
        }
        static void Go()
        {
            lock(locker)
            {
                if (!done)
                {
                    Console.WriteLine("Done");
                    done = true;
                }
            }
        }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved