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 | |
---|---|---|
LockManager | Konstruktor |
Początek
Metody
Nazwa | Opis | |
---|---|---|
AssertLockHeld(Object, LockManager.LockType, Int64) | Potwierdzenia, że danej blokada jest używana przez bieżący wątek (assert debugowania). | |
AssertLockHeld(ILockName, LockManager.LockType, Int64) | Potwierdzenia, że danej blokada jest używana przez bieżący wątek (assert debugowania). | |
AssertLockNotHeld(Object, LockManager.LockType, Int64) | Potwierdzenia, że dany blokada nie jest używana przez bieżący wątek (assert debugowania). | |
AssertLockNotHeld(ILockName, LockManager.LockType, Int64) | Potwierdzenia, że dany blokada nie jest używana przez bieżący wątek (assert debugowania). | |
AssertNoLocksHeld(Int64) | Potwierdzenia, że bieżący wątek posiada bez blokowania LockManager. | |
AssertNoLocksHeld(LockManager.LockType, Int64) | Potwierdzenia, że dany blokada nie jest używana przez bieżący wątek (assert debugowania). | |
AssertZeroActiveLockObjects | ||
CompareLockTypes | Porównuje dwa zablokować typów (Jeśli typy blokady nie są porównywalne rzuca). | |
Equals | Określa, czy określony obiekt jest równa bieżącego obiektu. (Odziedziczone z Object). | |
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). | |
GetHashCode | Służy jako funkcja mieszania dla określonego typu. (Odziedziczone z Object). | |
GetLock(Object, LockManager.LockType, Int64) | Uzyskać blokady. | |
GetLock(ILockName, LockManager.LockType, Int64) | Uzyskać blokady nazwane. | |
GetType | Pobiera Type bieżącego wystąpienia. (Odziedziczone z Object). | |
Lock(Object, Int64) | Uzyskać blokady monitor typu liść dla danego obiektu. | |
Lock(Object, LockManager.LockType, Int64) | Uzyskać blokady monitor obiektu. | |
Lock(ILockName, LockManager.LockType, Int64) | Uzyskać blokady nazwane. | |
MemberwiseClone | Tworzy kopię płytkie bieżące Object. (Odziedziczone z Object). | |
ReleaseAnyLock | Zwolnij blokadę najbardziej zagnieżdżonego typu blokady danego i dowolną nazwę. | |
ReleaseLock(Object, LockManager.LockType, Int64) | Zwolnij blokadę. | |
ReleaseLock(ILockName, LockManager.LockType, Int64) | Zwolnienie blokady nazwane. | |
TestLock(Object, LockManager.LockType, Int64) | Badania, jeśli wątek ten posiada już blokady. | |
TestLock(String, LockManager.LockType, Int64) | Badania, jeśli wątek ten posiada już blokady. | |
ToString | Zwraca wartość typu ciąg, który reprezentuje bieżący obiekt. (Odziedziczone z Object). | |
TryGetLock(Object, LockManager.LockType, Int64) | Spróbuj uzyskać blokady. | |
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.