LockManager (Clase)
Clase de LockManager.
Jerarquía de herencia
System.Object
Microsoft.TeamFoundation.Framework.Server.LockManager
Espacio de nombres: Microsoft.TeamFoundation.Framework.Server
Ensamblado: Microsoft.TeamFoundation.Framework.Server (en Microsoft.TeamFoundation.Framework.Server.dll)
Sintaxis
'Declaración
Public Class LockManager
public class LockManager
El tipo LockManager expone los siguientes miembros.
Constructores
Nombre | Descripción | |
---|---|---|
LockManager | Constructor |
Arriba
Métodos
Nombre | Descripción | |
---|---|---|
AssertLockHeld(Object, LockManager.LockType, Int64) | Validar que el bloqueo determinado almacenado por el subproceso actual (depuración assert). | |
AssertLockHeld(ILockName, LockManager.LockType, Int64) | Validar que el bloqueo determinado almacenado por el subproceso actual (depuración assert). | |
AssertLockNotHeld(Object, LockManager.LockType, Int64) | Validar que el bloqueo especificado no es mantenido por el subproceso actual (depuración assert). | |
AssertLockNotHeld(ILockName, LockManager.LockType, Int64) | Validar que el bloqueo especificado no es mantenido por el subproceso actual (depuración assert). | |
AssertNoLocksHeld(Int64) | Validar que el subproceso actual incluye ningún LockManager bloqueos. | |
AssertNoLocksHeld(LockManager.LockType, Int64) | Validar que el bloqueo especificado no es mantenido por el subproceso actual (depuración assert). | |
AssertZeroActiveLockObjects | Afirma que el iff hay activo bloqueos en el administrador de bloqueos (donde el refcount > 0) | |
CompareLockTypes | Compara dos tipos de bloqueo (produce si los tipos de bloqueo no son comparables). | |
Equals | Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object). | |
Finalize | Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object). | |
GetHashCode | Sirve como la función hash predeterminada. (Se hereda de Object). | |
GetLock(Object, LockManager.LockType, Int64) | Obtenga un bloqueo. | |
GetLock(ILockName, LockManager.LockType, Int64) | Obtenga un bloqueo denominado. | |
GetType | Obtiene el objeto Type de la instancia actual. (Se hereda de Object). | |
HasLocks | Devuelve true si este requestId posee ningún bloqueo | |
Lock(Object, Int64) | Obtenga un bloqueo de monitor de hoja de un objeto determinado. | |
Lock(Object, LockManager.LockType, Int64) | Obtenga un bloqueo de monitor de objeto. | |
Lock(ILockName, LockManager.LockType, Int64) | Obtenga un bloqueo denominado. | |
MemberwiseClone | Crea una copia superficial del objeto Object actual. (Se hereda de Object). | |
ReleaseAnyLock | Libere el bloqueo más anidado de un tipo determinado y de ninguno de bloqueo nombre. | |
ReleaseLock(Object, LockManager.LockType, Int64) | Libere un bloqueo. | |
ReleaseLock(ILockName, LockManager.LockType, Int64) | Libere un bloqueo denominado. | |
TestLock(Object, LockManager.LockType, Int64) | Pruebe si este subproceso mantiene ya un bloqueo. | |
TestLock(String, LockManager.LockType, Int64) | Pruebe si este subproceso mantiene ya un bloqueo. | |
ToString | Devuelve una cadena que representa el objeto actual. (Se hereda de Object). | |
TryGetLock(Object, LockManager.LockType, Int64) | Intente obtener un bloqueo. | |
TryGetLock(ILockName, LockManager.LockType, Int64, Int32) | Obtenga un bloqueo denominado |
Arriba
Comentarios
Evasión de interbloqueo administrada de procedimientos de almacén. Todo el bloqueo debe utilizar el LockManager bloqueos. Cada bloqueo se asigna un nivel (una posición en la jerarquía de bloqueo), y cualquier operación puede solicitar sólo bloqueos que es más alto de la jerarquía que cualquier bloqueo retenido actualmente.
LockManager admite el concepto de “denominado” bloque, por ejemplo cuando hay bloquear alguna entidad que no pueda tener un objeto estable en memoria, pero hay un solo nombre de esta entidad. Los ejemplos son buzón y base de datos. Cualquier objeto asociado al buzón o a la base de datos puede proceder e ir, todo lo que tenemos estable para dicha entidad es su nombre, como una base de datos GUID para una base de datos o un número de buzón para un buzón. Admitimos monitor bloqueamos y el Reader- programador bloqueos para denominado bloqueos.
LockManager también admite “objeto ordinario” bloque, cuando hay bloquear una instancia de objeto concreta en la memoria. Supervise sólo los bloqueos se admiten actualmente para el objeto bloqueos, que es el mismo mecanismo de bloqueo como se utiliza en la instrucción de “bloqueo” de C#. A diferencia de la instrucción de “bloqueo”, el bloqueo del objeto de LockManager participan totalmente en una jerarquía de bloqueo, por consiguiente podemos comprobarlos nos utilizamos en un orden correcto.
Un caso especial de “bloqueo del objeto” es “un bloqueo del objeto worksheet”. No hay que especificar el bloqueo de nivel para este tipo de bloqueo - se espera que siempre un bloqueo más- anidados y ningún otro bloqueo puede se realice al mantener un bloqueo de hoja.
“Denominado” bloque se implementan dinámicamente asignando un objeto de bloqueo para cada nombre único, y almacenándolos en un diccionario global. Para el acceso de un bloqueo denominado por nombre requiere consulta de diccionarios encontrar un objeto correspondiente de bloqueo. El diccionario si propio del objeto de bloqueo está bloqueado mientras realiza una búsqueda. Todo esto crea denominado bloquea potencialmente más costoso que ordinario bloqueos, debido al costo adicional para bloquear el diccionario y una consulta de diccionarios. Utilizamos dos técnicas de reducir este costo: (1) divide el diccionario de objeto de bloqueo, para reducir la contención de bloqueo global de diccionario y (2), proporcionando el llamador la capacidad de almacenar en memoria caché la referencia de objeto denominada de bloqueo y de omitir la consulta de diccionarios la mayoría de los casos. Observe que el crear particiones únicamente es insuficiente porque no ayuda mucho con ancho- ámbito bloquea relativamente, por ejemplo un bloqueo de base de datos; por ejemplo, cuando todos desea arrastrar el mismo bloqueo compartido.
Hay un número potencialmente ilimitado de nombres únicos de bloqueo. Por tanto, el número de objetos de bloqueo que podemos potencialmente crear también es ilimitado. Dado que las referencias a objetos denominados lock se almacenan en un diccionario global, dichos objetos podrían nunca automáticamente basura- recolectarse. Por consiguiente es deseable poder limpiar los objetos de bloqueo que no se utilizan con regularidad. Para admitir la limpieza segura para subprocesos de objetos denominados lock, estos objetos refcounted. Cada bloqueo adquirido un objeto denominado de bloqueo necesario hacer este objeto “addrefed”, la referencia debe ser liberado después de que se libere el bloqueo. Comprobaciones de la lógica de limpieza que el objeto no se hace referencia actualmente antes de quitarlo del diccionario. Después de que un objeto denominado lock se quite de un diccionario, se marca como eliminar y no puede addrefed más. Un intento de bloquear el mismo nombre la siguiente producirá asignar un nuevo objeto denominado de bloqueo que tiene el mismo nombre y agregarlo de nuevo a un diccionario. Así es OK que las referencias de objeto denominadas obsoleto de bloqueo se almacenan en caché por un llamador (por referencia obsoleta se detecta y actualizará la próxima vez que se intenta para bloquearlo y para asignar un nuevo objeto de bloqueo.
Utilizamos un heurística basada tiempo simple para limpiar objetos no usados de bloqueo. En cada n denominada inicio de bloqueo se denomina comprueban si hay una hora de ejecutar limpieza, y y examine el diccionario y obtiene todos los objetos que no se utilizan recientemente. A continuación se intenta eliminar cada por objeto y quitar la referencia de un diccionario. Limpieza es el elemento del diccionario, de modo que no tengamos bloquear otras particiones cuando ejecutamos limpieza para cualquier parte determinada.
Seguridad para subprocesos
Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Vea también
Referencia
Microsoft.TeamFoundation.Framework.Server (Espacio de nombres)