Condividi tramite


Classe LockManager

Classe di LockManager.

Gerarchia di ereditarietà

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

Spazio dei nomi:  Microsoft.TeamFoundation.Framework.Server
Assembly:  Microsoft.TeamFoundation.Framework.Server (in Microsoft.TeamFoundation.Framework.Server.dll)

Sintassi

'Dichiarazione
Public Class LockManager
public class LockManager

Il tipo LockManager espone i seguenti membri.

Costruttori

  Nome Descrizione
Metodo pubblico LockManager Costruttore

In alto

Metodi

  Nome Descrizione
Metodo pubblico AssertLockHeld(Object, LockManager.LockType, Int64) Asserzione che il blocco specificato viene utilizzato dal thread corrente (l'asserzione di debug.
Metodo pubblico AssertLockHeld(ILockName, LockManager.LockType, Int64) Asserzione che il blocco specificato viene utilizzato dal thread corrente (l'asserzione di debug.
Metodo pubblico AssertLockNotHeld(Object, LockManager.LockType, Int64) Asserzione che il blocco specificato non viene utilizzato dal thread corrente (l'asserzione di debug.
Metodo pubblico AssertLockNotHeld(ILockName, LockManager.LockType, Int64) Asserzione che il blocco specificato non viene utilizzato dal thread corrente (l'asserzione di debug.
Metodo pubblico AssertNoLocksHeld(Int64) Asserzione che il thread corrente non contiene blocchi di LockManager.
Metodo pubblico AssertNoLocksHeld(LockManager.LockType, Int64) Asserzione che il blocco specificato non viene utilizzato dal thread corrente (l'asserzione di debug.
Metodo pubblico AssertZeroActiveLockObjects Le asserzioni IFF presenti blocchi attivi in gestione di blocco (dove refcount > 0)
Metodo pubblicoMembro statico CompareLockTypes Confronta due tipi di blocco (genera un'eccezione se i tipi di blocchi non sono paragonabili).
Metodo pubblico Equals Determina se l'oggetto specificato equivale all'oggetto corrente. (Ereditato da Object)
Metodo protetto Finalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulitura prima che l'oggetto stesso venga recuperato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblico GetHashCode Funge da funzione hash predefinita. (Ereditato da Object)
Metodo pubblico GetLock(Object, LockManager.LockType, Int64) Ottenere un blocco.
Metodo pubblico GetLock(ILockName, LockManager.LockType, Int64) Ottenere un blocco denominato.
Metodo pubblico GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblico HasLocks Restituisce true se questo requestId possiede dei blocchi
Metodo pubblico Lock(Object, Int64) Ottenere un blocco di monitoraggio foglia per un oggetto specificato.
Metodo pubblico Lock(Object, LockManager.LockType, Int64) Ottenere un blocco di monitoraggio dell'oggetto.
Metodo pubblico Lock(ILockName, LockManager.LockType, Int64) Ottenere un blocco denominato.
Metodo protetto MemberwiseClone Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblico ReleaseAnyLock Rilasciare il blocco più annidato di tipo specificato e di una parte del nome.
Metodo pubblico ReleaseLock(Object, LockManager.LockType, Int64) Rilasciare un blocco.
Metodo pubblico ReleaseLock(ILockName, LockManager.LockType, Int64) Rilasciare un blocco denominato.
Metodo pubblico TestLock(Object, LockManager.LockType, Int64) Verifica se il thread è già utilizzato un blocco.
Metodo pubblico TestLock(String, LockManager.LockType, Int64) Verifica se il thread è già utilizzato un blocco.
Metodo pubblico ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
Metodo pubblico TryGetLock(Object, LockManager.LockType, Int64) Provare a ottenere un blocco.
Metodo pubblico TryGetLock(ILockName, LockManager.LockType, Int64, Int32) Ottenere un blocco denominato

In alto

Note

L'archivio gestito pratica di evitare di deadlock. Qualsiasi blocco deve utilizzare blocchi di LockManager. A ogni blocco viene assegnato un livello (una posizione nella gerarchia del blocco) e qualsiasi operazione può richiedere solo i blocchi che sono più in alto nella gerarchia che qualsiasi blocco attualmente in uso.

LockManager supporta il concetto di "denominato i blocchi", ad esempio quando è necessario bloccare una determinata entità per il quale non è possibile avere un oggetto in memoria stabile, ma è semplicemente un nome di tale entità. Gli esempi sono la cassetta postale e database. Qualsiasi oggetto associato alla cassetta postale o il database può interrompere e passare, è importante valutare se per tale entità costituisce il nome, ad esempio un database GUID per un database o un numero della cassetta postale di una cassetta postale. Sono i blocchi e i blocchi reader/writer di monitoraggio dei blocchi denominati.

LockManager supporta anche "oggetto comune si blocca", quando è necessario bloccare un oggetto specifico in memoria. Monitorare i blocchi solo sono attualmente supportati per i blocchi dell'oggetto, ovvero lo stesso meccanismo di blocco come utilizzato nell'istruzione "blocco" c ". Contrariamente all'istruzione "blocco", il blocco dell'oggetto di LockManager completamente fa parte di una gerarchia del blocco, sarà possibile eseguirne il test sono utilizzati in un ordine corretto.

Un caso speciale "blocco dell'oggetto" è un "blocco dell'oggetto foglia". Non è necessario specificare il livello di blocco per tale blocco - si prevede che sempre un blocco più annidato e nessun altro blocco può essere creato quando si utilizza tale blocco foglia.

"Denominato i blocchi" vengono implementati in modo dinamico allocando un oggetto blocco per ogni nome univoco e l'archiviazione in un dizionario globale. Pertanto accedere a un blocco denominato per nome richiede la consultazione di dizionari di trovare un oggetto corrispondente del blocco. Il dizionario se stesso dell'oggetto blocco sia bloccato durante tale ricerca. Questo rende i blocchi denominati potenzialmente più costosi dei blocchi comuni, a causa del costo aggiuntivo di bloccare una consultazione di dizionari di dizionario e. È possibile utilizzare due tecniche per ridurre tale rischio: (1) divisione del dizionario dell'oggetto blocco, per ridurre i conflitti di blocco globali di dizionario e (2) fornendo il chiamante la possibilità di memorizzare il riferimento a un oggetto denominato e il blocco di ignorare la consultazione di dizionari per la maggior parte dei casi. Si noti che il partizionamento per intervalli da solo non è sufficiente perché non consente di relativamente ai blocchi di ampio- ambito, ad esempio un blocco del database; ad esempio, quando tutti desidera selezionare lo stesso blocco condiviso.

Esiste un numero potenzialmente non associato dei nomi univoci del blocco. Di conseguenza, il numero di oggetti denominati che il blocco è possibile creare potenzialmente non è associato. Poiché i riferimenti agli oggetti denominati di blocco sono archiviati in un dizionario globale, tali oggetti possono mai essere sottoposti automaticamente a garbage collection. Pertanto si desidera consentire agli oggetti di blocco denominati pulitura non utilizzate regolarmente. Per supportare la pulizia thread-safe degli oggetti denominati il blocco, tali oggetti refcounted. Ogni blocco eseguito su un oggetto denominato del blocco è necessario eseguire tale addrefed "oggetto", il riferimento deve essere eliminato dopo il rilascio del blocco. Controlli della logica di pulizia che l'oggetto attualmente non viene fatto riferimento prima di rimuoverlo dal dizionario. Dopo che un oggetto denominato del blocco viene rimosso da un dizionario, viene contrassegnato come eliminato e non può essere addrefed altro. Se si tenta di bloccare lo stesso nome della volta successiva causerà allocare un nuovo oggetto denominato di blocco con lo stesso nome e aggiungerlo di nuovo a un dizionario. Pertanto può rendere i riferimenti agli oggetti denominati non aggiornati di blocco memorizzare nella cache da un chiamante - tale riferimento non aggiornato verrà rilevato e aggiornati alla successiva apertura di seguito per bloccare e allocare un nuovo oggetto blocco.

Viene utilizzato un euristico tempo semplice in base agli oggetti inutilizzati del blocco di pulizia. In ogni versione del blocco denominata N si chiama per verificare se esiste un tempo impiegato per eseguire la pulizia e quindi esamina il dizionario e raccoglie tutti gli oggetti senza riferimenti non utilizzati di recente. Quindi si tenta di eliminare ogni oggetto e rimuovere il riferimento un dizionario. La pulitura viene per partizione di dizionario, pertanto non è necessario bloccare altre partizioni quando si eseguirà la pulizia per ogni partizione specificata.

Codice thread safe

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Vedere anche

Riferimenti

Spazio dei nomi Microsoft.TeamFoundation.Framework.Server