程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 多線程系列(4)使用多線程的安全相關問題

多線程系列(4)使用多線程的安全相關問題

編輯:C#入門知識

  在使用多線程的時候,往往存在一定的公共數據,為了避免多個線程同時操作同一數據,我們需要為線程加鎖。

加鎖的原理:

每一個引用類型的對象都有一個同步索引塊,指示當前使用該對象的線程數,每個線程執行到Lock語句塊的時候就會判斷當前鎖定項(這裡是this,當前窗體對象)的同步索引塊是否等於0(即沒有線程在訪問該變量),如果等於0則進入執行塊,首先將同步索引塊的索引加1,表示當前多了一個線程使用this,等lock塊執行完成再將同步索引塊中的索引值減1,使得其它線程能夠繼續訪問,這樣就相當於實現了一個排隊機制,使得在適當的時候該串行執行的代碼串行執行。

我們可以利用lock語句為線程加鎖。示例代碼如下:

需要鎖定對象:lock(this)

需要鎖定代碼段:Object obj = new Object(); lock(obj){…}

我們還可以利用lock語句的語法糖Monitor來實現,示例代碼如下:

class Control
{
      private object obj=new object();
 
      public void Method()
      {
            Monitor.Enter(obj);
            try
            {......}
            catch(Excetion ex)
            {......}
            finally
            {
                Monitor.Exit(obj);
            }
      }
}

至此,這個初級的多線程入門系列完成了。後面隨著對多線程認識的加深,我們再來進行補充。

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