LockManager 類別
LockManager 類別。
繼承階層架構
System.Object
Microsoft.TeamFoundation.Framework.Server.LockManager
命名空間: Microsoft.TeamFoundation.Framework.Server
組件: Microsoft.TeamFoundation.Framework.Server (在 Microsoft.TeamFoundation.Framework.Server.dll 中)
語法
'宣告
Public Class LockManager
public class LockManager
LockManager 類型會公開下列成員。
建構函式
名稱 | 描述 | |
---|---|---|
![]() |
LockManager | 建構函式 |
回頁首
方法
回頁首
備註
Managed 市集作法無鎖定。 所有鎖定必須使用 LockManager 鎖定。 每個鎖定指派層級 (在鎖定階層架構中的位置),因此,所有作業只要求比目前持有的任何鎖定組態檔階層架構中的鎖定。
LockManager 支援「具名的概念鎖定,也就是說,當我們必須鎖定我們不可能在記憶體中的穩定物件的一些實體,不過,沒有這類實體名稱。 範例是信箱和資料庫。 任何物件與信箱或資料庫可能來來往往,我們沒有這類實體的位置櫪是其名稱的所有,像是資料庫或信箱數字的資料庫信箱的 GUID。 我們支援監視器鎖定,且讀取器 - 寫入器為具名鎖定。
當我們必須鎖定在記憶體中,的特定物件執行個體 LockManager 也支援泛型的物件「lock」。 只要監視鎖定物件的鎖定,則目前支援相同鎖定機制 (使用於 C# 「lock」陳述式。 與「lock」陳述式相反, LockManager 物件鎖定完全參與鎖定階層架構,所以可以驗證它們用於的正確順序。
「物件鎖定的特殊案例是分葉物件鎖定的。 我們不需要為這類鎖定的鎖定 (必須永遠是最巢狀的鎖定,另一個鎖定不可以被採用,按住這類分葉鎖定。
「具名鎖定來動態配置每個唯一的鎖定物件並將其儲存在實作一個全域字典。 因此存取名為鎖定名稱要求字典所找到對應的鎖定物件。 鎖定物件字典如果本身鎖定,當您執行這種搜尋時。 所有這些比一般鎖定使具名鎖定可能會高度耗費資源,因為鎖定字典和字典查閱的額外成本。 我們使用這兩種技術減少這類成本:(1) 分割鎖定物件的字典,減少字典全域鎖定爭用和 (2) 會提供呼叫端能夠快取具名鎖定物件參考和大部分時間略過字典查閱。 請注意個別分割的,不夠,因為它不是相對於本機說明與寬度範圍鎖定,例如資料庫鎖定;例如,當,每個人都要抓取共用相同的鎖定。
有可能是唯一索引鍵名稱無限制的數字。 因此,具名鎖定物件數目我們可能會建立也是無限制的。 由於具名鎖定物件的參考是否為全域字典儲存,這類物件無法自動記憶體回收。 因此我們想要清除命名了通常使用的鎖定物件。 若要支援具名鎖定物件安全執行緒清除,這類物件 refcounted。 在發行之後,在名為鎖定物件採取的每一個鎖定要求讓這類物件「addrefed」,參考應該釋放鎖定。 清除此邏輯會檢查物件不會移除目前參考從字典。 在名為鎖定物件從字典中移除後,它會標記為已配置且無法 addrefed。 嘗試鎖定相同名稱下會造成配置具有相同名稱和將其加字典的新命名鎖定物件。 因此可以排列失效的具名鎖定物件參考快取藉由呼叫端) 會偵測到這種過時參考並更新,下次我們嘗試鎖定它和配置新的鎖定物件。
我們會使用簡單的時間以啟發學習法來清除未使用的鎖定物件。 在每 N 具名鎖定版本上告訴我們檢查是否有時間執行清除,然後檢查字典並收集最近未使用的所有未參考的物件。 然後我們嘗試設定每個這類物件和從字典中移除它的參考。 清除是每個字典,分割,所以不需要鎖定其他分割,當我們執行任何指定分割時清除。
執行緒安全
這個類型的任何 Public static (在 Visual Basic 中為 Shared) 成員都是安全執行緒。不保證任何執行個體成員是安全執行緒。