鎖定宣告
使用 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);
}