鎖定宣告

使用 lock 語句,你可以控制不同執行緒對程式碼塊內程式碼的訪問。它通常用於防止競爭條件,例如多個執行緒從集合中讀取和刪除專案。由於鎖定強制執行緒等待其他執行緒退出程式碼塊,因此可能導致其他同步方法可以解決的延遲。

MSDN

lock 關鍵字通過獲取給定物件的互斥鎖,執行語句,然後釋放鎖來將語句塊標記為關鍵部分。

lock 關鍵字確保一個執行緒不進入程式碼的關鍵部分,而另一個執行緒處於臨界區。如果另一個執行緒試圖輸入鎖定的程式碼,它將等待,阻止,直到該物件被釋放。

最佳做法是定義要鎖定的私有物件,或私有靜態物件變數以保護所有例項共有的資料。

在 C#5.0 及更高版本中,lock 語句相當於:

bool lockTaken = false;
try 
{
    System.Threading.Monitor.Enter(refObject, ref lockTaken);
    // code 
}
finally 
{
    if (lockTaken)
        System.Threading.Monitor.Exit(refObject);
}

對於 C#4.0 及更早版本,lock 語句相當於:

System.Threading.Monitor.Enter(refObject);
try 
{
    // code
}
finally 
{
     System.Threading.Monitor.Exit(refObject);
}