Поделиться через


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 Конструктор

В начало страницы

Методы

  Имя Описание
Открытый метод AssertLockHeld(Object, LockManager.LockType, Int64) Утверждение, что заданное блокировку удержатьо текущим потоком (отладка assert).
Открытый метод AssertLockHeld(ILockName, LockManager.LockType, Int64) Утверждение, что заданное блокировку удержатьо текущим потоком (отладка assert).
Открытый метод AssertLockNotHeld(Object, LockManager.LockType, Int64) Утверждение, что заданное блокировка не удержатьо текущим потоком (отладка assert).
Открытый метод AssertLockNotHeld(ILockName, LockManager.LockType, Int64) Утверждение, что заданное блокировка не удержатьо текущим потоком (отладка assert).
Открытый метод AssertNoLocksHeld(Int64) Утверждение, что текущий поток не содержит никаких LockManager блокирует.
Открытый метод AssertNoLocksHeld(LockManager.LockType, Int64) Утверждение, что заданное блокировка не удержатьо текущим потоком (отладка assert).
Открытый метод AssertZeroActiveLockObjects Подтверждает iff существуют активен блокирует в диспетчере блокировки (где refcount > 0)
Открытый методСтатический член CompareLockTypes Сравнивает 2 типа блокировки (создает исключение, если типы блокировки не совпадают).
Открытый метод Equals Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.)
Защищенный метод Finalize Позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект будет утилизирован в процессе сборки мусора. (Унаследовано от Object.)
Открытый метод GetHashCode Служит хэш-функцией по умолчанию. (Унаследовано от Object.)
Открытый метод GetLock(Object, LockManager.LockType, Int64) Получить блокировку.
Открытый метод GetLock(ILockName, LockManager.LockType, Int64) Получение имени блокировку.
Открытый метод GetType Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)
Открытый метод HasLocks Возвращает значение true, если это requestId имеет любое блокирует
Открытый метод Lock(Object, Int64) Получает блокировку монитора целевого объекта для указанного объекта.
Открытый метод Lock(Object, LockManager.LockType, Int64) Получает блокировку монитора объекта.
Открытый метод Lock(ILockName, LockManager.LockType, Int64) Получение имени блокировку.
Защищенный метод MemberwiseClone Создает неполную копию текущего объекта Object. (Унаследовано от Object.)
Открытый метод ReleaseAnyLock Две вложенные блокировку заданного типа и режимов блокировки имя.
Открытый метод ReleaseLock(Object, LockManager.LockType, Int64) Параметры блокировку.
Открытый метод ReleaseLock(ILockName, LockManager.LockType, Int64) Именованные параметры блокировку.
Открытый метод TestLock(Object, LockManager.LockType, Int64) Если запустить этот поток уже содержит блокировку.
Открытый метод TestLock(String, LockManager.LockType, Int64) Если запустить этот поток уже содержит блокировку.
Открытый метод ToString Возвращает строку, представляющую текущий объект. (Унаследовано от Object.)
Открытый метод TryGetLock(Object, LockManager.LockType, Int64) Попробуйте получить блокировку.
Открытый метод TryGetLock(ILockName, LockManager.LockType, Int64, Int32) Получает блокировку с именем

В начало страницы

Заметки

Управляемое защита взаимоблокировки методик Магазина. Все блокирования следует использовать LockManager блокирует. С каждым блокированию уровень (позицию в иерархии блокирован) и любая операция может только запросить блокирует, выше в иерархии, чем любое в данный момент удержатьое блокировку.

LockManager поддерживает понятие «с именем блокирует», например, когда нужно блокировать некоторая сущность, для которой мы можем не иметь стабилизированный объект в памяти, но имеется только имя той сущности. Примеры почта и базы данных. Любой объект, связанный с почте или базой данных может быть получено и перейти, все следует конюшню той сущности его имя, например базы данных GUID для базы данных или номера для электронной почты. Рекомендуется поддерживаем монитор блокируем и читатель- модуль записи блокирует для именованного блокирует.

LockManager также поддерживает обычный «объект блокирует», если нужно блокировать определенный экземпляр объекта в памяти. Только " блокирует в настоящее время поддерживаются для объекта блокирует, этот же блокирован механизм как используется в инструкцию «блокировки» C#. В отличие от выписки «» блокировки, блокировка объекта LockManager полностью участвует в блокирован иерархии, поэтому мы можно проверить их используется в правильном порядке.

Один особый случай «блокировки объекта» блокировка объекта конечного». Рекомендуется не указывать уровень блокировки для такого блокировки — это требуется, чтобы всегда быть, более всего- вложенные блокировании и никаких других не блокирует можно принять, содержащую то блокировку целевого объекта.

«С блокирует» реализуйте объект динамически выделить блокировки для каждого уникального имени и сохранить их в глобальном словаре. Таким образом получить блокировку с именем по имени требует поиск словаря найдет соответствующий объект блокировки. Словарь самого объекта блокировки блокируйте при выполнении такой поиск. Все это делает именованным блокирует потенциально затратными, чем обычный блокирует, из-за дополнительной стоимости блокировать словарь и поиска словаря. Мы используем 2 метода для снижения затрат так: (1) разделяющ словарь объекта блокировки, для снижения конфликта глобального блокировки словаря, а (2) также вызывающий объект возможность кэшировать именованная ссылка на объект блокировки и поиск словаря обойти большую часть времени. Обратите внимание, что единственный разделения недостаточен, поскольку он не помогает много с относительно широк- областью блокирует, например блокировку базы данных; например, при которых требует, чтобы захватить ту же совмещаемая блокировка.

Потенциально неограниченный число уникальных имен блокировки. Поэтому число именованных объектов блокировки мы можно также создать потенциально неограниченный. Поскольку ссылки на именованные объекты блокировки хранятся в глобальном словаре, такие объекты могут быть автоматически не собираются. Поэтому мы хотим возможность очистить называемые объектами блокировки, которые регулярно не используются. Для поддержки потокобезопасную очистки именованных объектов блокировки refcounted такие объекты. Каждое блокировку, на именованный объект блокировки необходимо иметь такой объект «. addrefed», ссылка должна быть сигнал после блокировку. Логика очистки проверяет, что объект в данный момент не ссылаются перед удалением из словаря. После того как именованный объект блокировки удаляется из словаря, он помечается как удалении объекта и не может быть addrefed больше. Попытка блокирования одно и то же имя в следующий раз при выборе нового именованного объекта блокировки с тем же именем и добавить его снова в словарь. Таким образом, ОДОБРЕНА наличие устаревших именованные ссылки на объекты блокировки кэшируемых вызывающим объектом — будет обнаружена и будет обновлена несвежая такая ссылка в следующий раз мы попробуем блокировать его и выбрав новый объект блокировки.

Мы используем эвристику, простого времени для очистки неиспользуемые объекты блокировки. В каждом примере N выпуском блокировки вызывает мы проверьте, время выполнения очистка и проверьте словарь и соберите все неиспользуемая объекты, которые не используются в прошлый раз. Затем мы выполняется попытка удаления каждый такой объект и удалить его ссылку из словаря. Очистка в разделе словаря, поэтому рекомендуется не нужно блокировать другие разделы при мы выполним очистка для любого данного раздела.

Потокобезопасность

Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

См. также

Ссылки

Microsoft.TeamFoundation.Framework.Server - пространство имен