1. 程式人生 > >C#多執行緒中通過lock實現執行緒同步

C#多執行緒中通過lock實現執行緒同步

  1. Lock定義
    lock關鍵字用來確保程式碼塊執行完成,而不會被其他執行緒中斷。它可以把一段程式碼定義為互斥段(critical section),互斥段在一個時刻只允許一個執行緒進入執行,而其他執行緒必須等待。這是通過在程式碼執行期間為給定物件獲取互斥鎖來實現的。

    在多執行緒中,每個執行緒都有自己的資源,但是程式碼區是共享的,即每個執行緒都可以執行相同的函式。這樣可能導致幾個執行緒同時執行一個函式,導致資料混亂,產生不可預料的結果,因此應該避免這種情況發生。
    執行過程如下

private static object obj = new object();
lock(obj)
{
      //鎖定執行的程式碼段
}

執行緒A進入lock語句,判斷obj是否已申請了互斥鎖,如果不存在,則申請一個新的互斥鎖,這時執行緒A進入lock裡面了。此時執行緒B後來的話,會等待A完成。

obj代表你希望跟蹤的物件,通常是物件引用,推薦使用私有的只讀靜態物件,比如:
private static readonly object obj = new object();