1. 程式人生 > 其它 >C# lock關鍵字

C# lock關鍵字

Lock定義:

lock 關鍵字可以用來確保程式碼塊完成執行,而不會被其他的執行緒中斷,它可以把一段程式碼定為互斥性。

互斥段在一個時間段只允許一個執行緒進行執行。而其他的執行緒必須等待。這是通過在程式碼塊執行期間為給定物件獲取互斥鎖來實現的。

簡單解釋執行過程?

        private static object  ojb = new object();
        lock(obj)
        {

                 //鎖定執行的程式碼段

        } 

假設執行緒A先執行,執行緒B稍微慢一點。執行緒A執行到lock語句,判斷obj是否已申請了互斥鎖,

判斷依據是逐個與已存在的鎖進行object.ReferenceEquals比較(此處未加證實),如果不存在,則申請一個新的互斥鎖,

這時執行緒A進入lock裡面了。

這時假設執行緒B啟動了,而執行緒A還未執行完lock裡面的程式碼。執行緒B執行到lock語句,檢查到obj已經申請了互斥鎖,於是等待;直到執行緒A執行完畢,釋放互斥鎖,執行緒B才能申請新的互斥鎖並執行lock裡面的程式碼。