Freigeben über


LockManager-Klasse

LockManager-Klasse.

Vererbungshierarchie

System.Object
  Microsoft.TeamFoundation.Framework.Server.LockManager

Namespace:  Microsoft.TeamFoundation.Framework.Server
Assembly:  Microsoft.TeamFoundation.Framework.Server (in Microsoft.TeamFoundation.Framework.Server.dll)

Syntax

'Declaration
Public Class LockManager
public class LockManager

Der LockManager-Typ macht die folgenden Member verfügbar.

Konstruktoren

  Name Beschreibung
Öffentliche Methode LockManager Konstruktor

Zum Seitenanfang

Methoden

  Name Beschreibung
Öffentliche Methode AssertLockHeld(Object, LockManager.LockType, Int64) Erklären Sie, dass die angegebene Sperre vom aktuellen Thread angehalten wird (Debug Assert).
Öffentliche Methode AssertLockHeld(ILockName, LockManager.LockType, Int64) Erklären Sie, dass die angegebene Sperre vom aktuellen Thread angehalten wird (Debug Assert).
Öffentliche Methode AssertLockNotHeld(Object, LockManager.LockType, Int64) Erklären Sie, dass die angegebene Sperre nicht vom aktuellen Thread angehalten wird (Debug Assert).
Öffentliche Methode AssertLockNotHeld(ILockName, LockManager.LockType, Int64) Erklären Sie, dass die angegebene Sperre nicht vom aktuellen Thread angehalten wird (Debug Assert).
Öffentliche Methode AssertNoLocksHeld(Int64) Erklären Sie, dass der aktuelle Thread nicht LockManager-Sperren enthält.
Öffentliche Methode AssertNoLocksHeld(LockManager.LockType, Int64) Erklären Sie, dass die angegebene Sperre nicht vom aktuellen Thread angehalten wird (Debug Assert).
Öffentliche Methode AssertZeroActiveLockObjects Assertion, wenn es aktive Sperren im Sperrenmanager gibt (wobei refcount > 0)
Öffentliche MethodeStatischer Member CompareLockTypes Vergleicht zwei Sperrtypen (löst, wenn Sperrtypen nicht vergleichbar sind).
Öffentliche Methode Equals Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist. (Von Object geerbt.)
Geschützte Methode Finalize Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche Methode GetHashCode Fungiert als die Standardhashfunktion. (Von Object geerbt.)
Öffentliche Methode GetLock(Object, LockManager.LockType, Int64) Abrufen einer Sperre ab.
Öffentliche Methode GetLock(ILockName, LockManager.LockType, Int64) Rufen Sie eine benannte Sperre ab.
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche Methode HasLocks Gibt true zurück, wenn dieses requestId alle Sperren besitzt
Öffentliche Methode Lock(Object, Int64) Rufen Sie eine Blattmonitorsperre für ein angegebenes Objekt ab.
Öffentliche Methode Lock(Object, LockManager.LockType, Int64) Rufen Sie eine Objektmonitorsperre ab.
Öffentliche Methode Lock(ILockName, LockManager.LockType, Int64) Rufen Sie eine benannte Sperre ab.
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche Methode ReleaseAnyLock Geben Sie die geschachtelte Sperre eines angegebenen Sperrentyps und -irgendwelcher Name frei.
Öffentliche Methode ReleaseLock(Object, LockManager.LockType, Int64) Geben Sie eine Sperre.
Öffentliche Methode ReleaseLock(ILockName, LockManager.LockType, Int64) Geben Sie eine benannte Sperre.
Öffentliche Methode TestLock(Object, LockManager.LockType, Int64) Test, wenn dieser Thread bereits eine Sperre hält.
Öffentliche Methode TestLock(String, LockManager.LockType, Int64) Test, wenn dieser Thread bereits eine Sperre hält.
Öffentliche Methode ToString Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Öffentliche Methode TryGetLock(Object, LockManager.LockType, Int64) Versuchen Sie, eine Sperre einzurichten.
Öffentliche Methode TryGetLock(ILockName, LockManager.LockType, Int64, Int32) Rufen Sie eine benannte Sperre ab

Zum Seitenanfang

Hinweise

Verwalteter Speicher werden Deadlockvermeidung. Alle Sperre muss die LockManager-Sperren verwenden. Jede Sperre wird eine Ebene (eine Position in der Sperrenhierarchie) zugewiesen, und ein beliebiger Vorgang kann er nur anfordern, die in der Hierarchie als nur eine unterbrochene Sperre höher stehen.

LockManager unterstützt das Konzept von "benannten Sperren", z., wenn wir etwas Entität sperren müssen, für die Sie kein stabiles Objekt im Arbeitsspeicher haben, sondern nur einen Namen dieser Entität haben. Beispiele sind Postfach und Datenbank. Jedes Objekt zugeordnet Postfach ein, oder Datenbank kann bzw. zu wechseln, ist der gesamte, den wir Anhand für diese Entität haben, Name, wie eine Datenbank GUID für eine Datenbank oder eine Postfachzahl für ein Postfach. Wir unterstützen Monitorsperren und -Lese-/Schreibsperre für benannte Sperren.

LockManager unterstützt auch gewöhnliches "Objekt sperrt", wenn wir eine bestimmte Objektinstanz im Arbeitsspeicher sperren müssen. Überwachen Sie Sperren werden nur unterstützt derzeit für Objektsperren, die ist dieselbe wie Ausrichtung "in der Sperren" Anweisung C#. Im Gegensatz zum "Sperren" Anweisung nimmt LockManager-Objektsperre durchweg an einer Sperrenhierarchie beteiligt, daher können Sie sie validieren werden verwendet in einer richtigen Reihenfolge.

Eine besondere Variante "der Objektsperre" eine "Blattobjektsperre". Wir müssen die Sperre nicht angeben, die für solche Sperre auf Assemblyebene - Es wird erwartet, dass eine höchst-geschachtelte Sperre immer wird und keine anderen Sperren können übernommen werden, wenn Sie diese Blattsperre enthält.

Benannte "Sperren" werden implementiert, indem dynamisch ein Sperrenobjekt für jeden eindeutigen Namen verknüpft, und sie in einem globalen Wörterbuch gespeichert. Auf eine benannte Sperre so zugreifen muss nach Wörterbuchsuche, ein entsprechendes Sperrenobjekt zu suchen. Das Sperrenobjektwörterbuch, wenn Sie selbst gesperrt sind, während Sie solche Suche ausführen. Alle stellt diesen benannten Sperren möglicherweise Aufwand als gewöhnliche Sperren, aufgrund der zusätzliche Aufwand Sperrens des Wörterbuchs und der Wörterbuchsuche erstellt. Es werden zwei Verfahren, diese Kosten zu verringern: (1) Sperrenobjektwörterbuch Partitionierung, den globalen Sperrkonflikt des Wörterbuchs zu reduzieren, und (2), Bereitstellen Aufrufer die Möglichkeit, den benannten Sperrenobjektverweis zwischenzuspeichern und die Wörterbuchsuche meistens zu umgehen. Beachten Sie, dass allein partitionieren, da nicht viel mit relativ BreitBereichssperren hilft, wie einer Datenbanksperre unzureichend ist; wenn beispielsweise jeder die gleiche gemeinsame Sperre greifen möchte.

Es gibt möglicherweise unendliche eindeutige Zahl Sperrennamen. Deshalb ist die Anzahl von benannten Sperrenobjekten, die wir möglicherweise erstellen können, auch Unendlich. Da Verweise auf Named Sperrenobjekten in einem globalen Wörterbuch gespeichert werden, können diese Objekte der Garbage Collection zugeordnet nie automatisch sein. Daher möchten wir sein, um benannte Sperrenobjekte zu bereinigen, die regelmäßig nicht verwendet werden. Um threadsichere Bereinigung von benannten Sperrenobjekten zu unterstützen, refcounted diese Objekte. Jede Sperre, die auf einen benannten Sperrenobjekt ergriffen wird, erfordert Lassen solchen Objekts "addrefed", der Verweis sollte freigegeben werden, nachdem Sperre aufgehoben wird. Bereinigungslogik überprüft, ob das Objekt nicht direkt verwiesen wird, bevor aus dem Wörterbuch entfernt. Nachdem ein benanntes Sperrenobjekt von einem Wörterbuch entfernt wird, wird es als freigegeben gekennzeichnet, und kann nicht addrefed mehr. Ein Versuch, die gleichen Namen nächsten Mal zu sperren verursacht das Zuordnen eines neuen benannten Sperrenobjekts, das den gleichen Namen und Hinzufügen er zurück zu einem Wörterbuch hat. Daher ist er OK, veraltete benannte Sperrenobjektverweise von einem Aufrufer zwischenspeichern soll - solche veraltete Verweis wird erkannt und aktualisiert beim nächsten Mal, wenn Sie versuchen, ihn zu sperren und einem neuen Sperrenobjekt zuzuordnen.

Wir verwenden einfache Uhrzeit ein basiertes heuristisches, um nicht verwendete Sperrenobjekte zu bereinigen. Auf jedem N, das Sperrenversion genannt wird, ruft uns überprüfen, ob eine Uhrzeit gibt, Bereinigung auszuführen, und dann überprüfen das Wörterbuch und Erfassen alle auf Objekte auf, die nicht zuletzt verwendet werden. Anschließend versuchen wir, jedem solchen Objekt freigeben und den zugehörigen Verweis von einem Wörterbuch zu entfernen. Bereinigung ist pro Wörterbuchpartition, um andere Partitionen nicht sperren müssen, wenn wir Bereinigung für eine gegebene Partition ausführen.

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Siehe auch

Referenz

Microsoft.TeamFoundation.Framework.Server-Namespace