C#_關鍵字:Lock的解釋和使用
阿新 • • 發佈:2018-05-04
使用 ffd 代碼塊 ID pre C# 互斥鎖 由於 new
定義
lock關鍵字,互斥鎖,通過鎖住某一對象從而將語句塊({})裏面的代碼設置為臨界區。
線程在線性執行代碼時若遇到互斥鎖,必須先申請互斥鎖的訪問權,若訪問成功,則繼續線性訪問互斥鎖後的臨界區代碼塊。聲明如下:
1 Object thisLock = new Object(); 2 lock (thisLock) 3 { 4 // Critical code section. 5 }
lock 關鍵字可確保當一個線程位於代碼的臨界區時,另一個線程不會進入該臨界區。 如果其他線程嘗試進入鎖定的代碼,則它將一直等待(即被阻止),直到該對象被釋放。
使用
-
鎖定的對象
鎖定的對象不能是Public類型,或者 lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 使用都是不符合規範。
Lock的對象只有在非外部訪問的情況下才不會對外部的線程代碼產生影響。由於lock (this)、lock (typeof (MyType)) 和 lock ("myLock")中的this,typeof(MyType)有可能被外部訪問,外部代碼若存在與"myLock"相同的字符串,這些對象都會被鎖住,對進程代碼產生不可預測的影響。故而建議使用Private對象作為鎖的對象。
C#_關鍵字:Lock的解釋和使用