Udostępnij za pośrednictwem


Klasa LockManager

Klasa LockManager.

Hierarchia dziedziczenia

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

Przestrzeń nazw:  Microsoft.TeamFoundation.Framework.Server
Zestaw:  Microsoft.TeamFoundation.Framework.Server (w Microsoft.TeamFoundation.Framework.Server.dll)

Składnia

'Deklaracja
Public Class LockManager
public class LockManager

Typ LockManager uwidacznia następujące elementy członkowskie.

Konstruktorzy

  Nazwa Opis
Metoda publiczna LockManager Konstruktor

Początek

Metody

  Nazwa Opis
Metoda publiczna AssertLockHeld(Object, LockManager.LockType, Int64) Potwierdzenia, że danej blokada jest używana przez bieżący wątek (assert debugowania).
Metoda publiczna AssertLockHeld(ILockName, LockManager.LockType, Int64) Potwierdzenia, że danej blokada jest używana przez bieżący wątek (assert debugowania).
Metoda publiczna AssertLockNotHeld(Object, LockManager.LockType, Int64) Potwierdzenia, że dany blokada nie jest używana przez bieżący wątek (assert debugowania).
Metoda publiczna AssertLockNotHeld(ILockName, LockManager.LockType, Int64) Potwierdzenia, że dany blokada nie jest używana przez bieżący wątek (assert debugowania).
Metoda publiczna AssertNoLocksHeld(Int64) Potwierdzenia, że bieżący wątek posiada bez blokowania LockManager.
Metoda publiczna AssertNoLocksHeld(LockManager.LockType, Int64) Potwierdzenia, że dany blokada nie jest używana przez bieżący wątek (assert debugowania).
Metoda publiczna AssertZeroActiveLockObjects
Metoda publicznaStatyczny element członkowski CompareLockTypes Porównuje dwa zablokować typów (Jeśli typy blokady nie są porównywalne rzuca).
Metoda publiczna Equals Określa, czy określony obiekt jest równa bieżącego obiektu. (Odziedziczone z Object).
Metoda chroniona Finalize Umożliwia obiekt spróbuj zwolnić zasoby i wykonywania innych operacji oczyszczania, zanim jest odzyskane w procesie wyrzucania elementów bezużytecznych. (Odziedziczone z Object).
Metoda publiczna GetHashCode Służy jako funkcja mieszania dla określonego typu. (Odziedziczone z Object).
Metoda publiczna GetLock(Object, LockManager.LockType, Int64) Uzyskać blokady.
Metoda publiczna GetLock(ILockName, LockManager.LockType, Int64) Uzyskać blokady nazwane.
Metoda publiczna GetType Pobiera Type bieżącego wystąpienia. (Odziedziczone z Object).
Metoda publiczna Lock(Object, Int64) Uzyskać blokady monitor typu liść dla danego obiektu.
Metoda publiczna Lock(Object, LockManager.LockType, Int64) Uzyskać blokady monitor obiektu.
Metoda publiczna Lock(ILockName, LockManager.LockType, Int64) Uzyskać blokady nazwane.
Metoda chroniona MemberwiseClone Tworzy kopię płytkie bieżące Object. (Odziedziczone z Object).
Metoda publiczna ReleaseAnyLock Zwolnij blokadę najbardziej zagnieżdżonego typu blokady danego i dowolną nazwę.
Metoda publiczna ReleaseLock(Object, LockManager.LockType, Int64) Zwolnij blokadę.
Metoda publiczna ReleaseLock(ILockName, LockManager.LockType, Int64) Zwolnienie blokady nazwane.
Metoda publiczna TestLock(Object, LockManager.LockType, Int64) Badania, jeśli wątek ten posiada już blokady.
Metoda publiczna TestLock(String, LockManager.LockType, Int64) Badania, jeśli wątek ten posiada już blokady.
Metoda publiczna ToString Zwraca wartość typu ciąg, który reprezentuje bieżący obiekt. (Odziedziczone z Object).
Metoda publiczna TryGetLock(Object, LockManager.LockType, Int64) Spróbuj uzyskać blokady.
Metoda publiczna TryGetLock(ILockName, LockManager.LockType, Int64, Int32)

Początek

Uwagi

Magazyn zarządzanych praktyk uniknięcie zakleszczenia.Blokowanie wszystkich muszą używać blokad LockManager.Zablokuj każdy jest przypisany poziom (pozycji w hierarchii blokowania) i wszelkich operacji można tylko żądania blokady, znajdujące się wyżej w hierarchii niż wszelkie blokady utrzymywanej aktualnie.

LockManager obsługuje pojęcia "o nazwie blokad" e.g. podczas możemy zablokować niektóre jednostki, dla której może nie być stabilna obiektu w pamięci, ale ma tylko nazwa tego podmiotu.Przykłady skrzynki pocztowej i bazy danych.Dowolnego obiektu skojarzonego z skrzynki pocztowej lub bazy danych mogą pochodzić i przejść, wszystkie mamy stabilne taki podmiot jest jego nazwy, takie jak bazy danych identyfikator GUID dla bazy danych lub skrzynki pocztowej numer skrzynki pocztowej.Obsługujemy blokad monitora i blokady modułu zapisującego czytnik nazwanego blokad.

LockManager obsługuje także zwykłe "object blokad", kiedy możemy zablokować wystąpienia określonego obiektu w pamięci.Tylko Monitor blokady są obecnie obsługiwane blokad obiektu, który jest taki sam blokowania mechanizm użyte w instrukcji języka C# "Zablokuj".W przeciwieństwie do instrukcji "Zablokuj", LockManager, blokady obiektu w pełni uczestniczy w hierarchii blokowania, dlatego firma Microsoft można Sprawdź, czy są używane w prawidłowej kolejności.

Jeden szczególny przypadek "blokada obiektu" jest "blokada obiektu leaf".Nie mamy Określ poziom blokowania takich Lock - oczekuje się zawsze zostać blokady zagnieżdżone najbardziej i nie inne blokady mogą być brane utrzymujące lock takiego typu liść.

"O nazwie blokad" są implementowane dynamicznie przydzielając zablokować obiektu dla każdego unikatową nazwę i przechowywania ich w słowniku globalnego.Tym samym dostęp do nazwanych lock przez nazwę wymaga słownika wyszukiwania znaleźć odpowiedni obiekt blokady.Słownik obiektów lock powinien sam być zablokowane podczas wykonywania takiego wyszukiwania.Wszystkie temu nazwanego blokad potencjalnie droższe niż zwykłe blokady z powodu dodatkowych kosztów blokowania słownika i wyszukiwania słownika.Korzystamy z dwóch technik zmniejszania takich kosztów: (1) partycjonowanie lock słownik obiektów, do zmniejszenia rywalizacji globalnej blokady słownik i (2) ustalające rozmówcy możliwość buforowania nazwanego lock odwołanie do obiektu i pominąć większość czasu wyszukiwania słownika.Należy zauważyć, że samodzielnie Partycjonowanie jest niewystarczające, ponieważ nie pomoc bardzo z stosunkowo zasięg blokady, takich jak blokada bazy danych; na przykład, kiedy każdy chce chwyć takie same współużytkowane blokady.

Istnieje potencjalnie nieokreślonej liczby lock unikatowe nazwy.Dlatego liczbę obiektów lock nazwane, które potencjalnie mogą tworzyć również jest niepowiązany.Ponieważ odwołania do obiektów nazwanego blokady są przechowywane w globalnej słownik, takie obiekty nigdy nie mogą być automatycznie pobrane garbage.Dlatego chcemy być w stanie oczyścić blokowanie nazwanych obiektów, które nie są używane regularnie.Do obsługi Oczyszczanie wielowątkowość lock nazwanych obiektów, obiekty takie są refcounted.Co blokady w nazwanym zablokować obiektu wymaga takiego obiektu "addrefed", odniesienia powinny być zwolnione po blokada jest zwalniana.Oczyszczanie logiki kontroli, że obiekt nie jest obecnie wywoływane przed jego usunięciem z słownika.Po usunięciu obiektu lock nazwane ze słownika jest oznaczony jako usunięty i nie może być addrefed więcej.Próba zablokowania tej samej nazwie w następnym spowoduje przydzielenie nowego obiektu lock nazwane, tej samej nazwie i dodanie go do słownika.Zatem jest OK aby starych o nazwie odniesienia obiektu lock buforowane przez obiekt wywołujący - starych odniesienie będzie wykrytych i zaktualizowanych następnym razem staramy się go zablokować i przydzielić nowego obiektu blokady.

Używamy heurystyki simple time oparte oczyszczenie blokowanie nieużywanych obiektów.Na każdy n o nazwie lock release połączeń, które możemy sprawdzić, jeśli czas Uruchom oczyszczanie, a następnie zbadać słownika i zebrać wszystkie nieużywane obiekty, które nie są używane ostatnio.Następnie możemy próba zbywać każdego takiego obiektu i usunąć jej odwołanie ze słownika.Oczyszczanie jest dla każdej partycji słownika, tak aby nie mamy Zablokuj inne partycje, gdy będziemy Uruchom oczyszczanie dla danej partycji.

Bezpieczeństwo wątku

Wszystkie publiczne static (Shared w języku Visual Basic) elementy członkowskie tego typu są bezpieczne dla wątków. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków.

Zobacz też

Informacje

Przestrzeń nazw Microsoft.TeamFoundation.Framework.Server