Classe LockManager

Classe 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) L'asserzione che il dato blocco dal thread corrente (debug assert).
Metodo pubblico AssertLockHeld(ILockName, LockManager.LockType, Int64) L'asserzione che il dato blocco dal thread corrente (debug assert).
Metodo pubblico AssertLockNotHeld(Object, LockManager.LockType, Int64) L'asserzione che il blocco specificato non è mantenuto dal thread corrente (debug assert).
Metodo pubblico AssertLockNotHeld(ILockName, LockManager.LockType, Int64) L'asserzione che il blocco specificato non è mantenuto dal thread corrente (debug assert).
Metodo pubblico AssertNoLocksHeld(Int64) L'asserzione che il thread corrente blocchi non LockManager.
Metodo pubblico AssertNoLocksHeld(LockManager.LockType, Int64) L'asserzione che il blocco specificato non è mantenuto dal thread corrente (debug assert).
Metodo pubblico AssertZeroActiveLockObjects
Metodo pubblicoMembro statico CompareLockTypes Confronta due bloccare tipi (genera se i tipi di blocco 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 per un determinato tipo. (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 Lock(Object, Int64) Ottenere un blocco di monitor di foglia di un determinato oggetto.
Metodo pubblico Lock(Object, LockManager.LockType, Int64) Ottenere un blocco di monitor di 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ù nidificato di un tipo di blocco specificato e un nome qualsiasi.
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) Verificare se il thread contiene già un blocco.
Metodo pubblico TestLock(String, LockManager.LockType, Int64) Verificare se il thread contiene già un blocco.
Metodo pubblico ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
Metodo pubblico TryGetLock(Object, LockManager.LockType, Int64) Se si tenta di ottenere un blocco.
Metodo pubblico TryGetLock(ILockName, LockManager.LockType, Int64, Int32)

In alto

Note

Archivio gestito pratiche di elusione di deadlock.Tutti i blocchi, è necessario utilizzare i blocchi di LockManager.Ogni blocco viene assegnato un livello (posizione nella gerarchia di blocco) e qualsiasi operazione possibile solo i blocchi di richiesta sono superiori nella gerarchia di qualsiasi blocco attualmente attivo.

LockManager supporta il concetto di "denominato blocchi", e.g. quando è necessario bloccare alcune entità per il quale forse non abbiamo un oggetto stabile in memoria, ma hanno un nome di tale entità.Sono esempi di cassette postali e database.Qualsiasi oggetto associato alla cassetta postale o database possibile i loro spostamenti, possiamo stabile per tale entità è il nome, ad esempio un database GUID per un numero di database o cassetta postale di una cassetta postale.Supportiamo monitor blocchi e blocchi in lettura-scrittura per i blocchi denominati.

LockManager supporta anche un normale oggetto"blocchi", quando è necessario bloccare una particolare istanza di oggetto in memoria.Solo Monitor i blocchi sono attualmente supportati per i blocchi di oggetto, che è lo stesso blocco meccanismo utilizzato nell'istruzione c# "Blocca".In contrasto con l'istruzione "lock", LockManager blocco oggetto completamente partecipa a una gerarchia di blocco, pertanto possiamo verificare utilizzati in modo corretto.

Un caso speciale di "blocco" è un "blocco oggetto foglia".Non è necessario specificare il livello di blocco per tale blocco - è previsto per essere sempre un blocco nidificato la maggior parte e nessun altro blocco può essere eseguito quando tale blocco foglia.

"Denominato blocchi" viene implementato in modo dinamico l'allocazione di un oggetto di blocco per ciascun nome univoco e li memorizza in un dizionario globale.In questo modo l'accesso a un blocco denominato nome richiede ricerche nel dizionario per trovare un oggetto di blocco corrispondente.Il dizionario di oggetti di blocco deve stesso essere bloccato durante l'esecuzione di tale ricerca.Tutto ciò rende potenzialmente più costosi rispetto ai normali blocchi, denominati blocchi a causa dei costi supplementari di bloccare il dizionario e una ricerca nel dizionario.Utilizziamo due tecniche per ridurre tali costi: dizionario oggetto di blocco, per ridurre la contesa di blocco globale del dizionario, il partizionamento (1) e (2) fornendo chiamante la possibilità di memorizzare nella cache il riferimento all'oggetto denominato blocco e la ricerca nel dizionario di ignorare la maggior parte del tempo.Si noti che è insufficiente partizionamento da solo perché non serve molto con blocchi relativamente a livello di ambito, ad esempio un blocco del database; ad esempio, quando tutti gli utenti desiderano acquisire lo stesso condivisa blocco.

È presente un numero potenzialmente illimitato di nomi univoci di blocco.Di conseguenza, il numero di oggetti denominata blocco che è potenzialmente possibile creare anche è illimitato.Poiché i riferimenti agli oggetti di blocco denominato vengono memorizzati in un dizionario globale, tali oggetti non possono essere mai automaticamente raccolto nel Garbage Collector.È quindi necessario essere in grado di pulire gli oggetti denominati blocco che non vengano utilizzati regolarmente.Per supportare la pulitura di thread-safe di oggetti di blocco denominato, tali oggetti sono refcounted.Ogni blocco accettato in un oggetto denominato blocco richiede aventi ad oggetto "addrefed", il riferimento deve essere rilasciato dopo il rilascio del blocco.Logica di pulitura controlla che l'oggetto non fa attualmente riferimento prima di rimuoverla dal dizionario.Dopo la rimozione di un oggetto di blocco denominato da un dizionario, viene contrassegnato come eliminato e non può essere più addrefed.Un tentativo di bloccare lo stesso nome successivo comporta l'assegnazione di un nuovo oggetto denominato blocco che ha lo stesso nome e aggiunta un dizionario.Pertanto si desidera avere obsoleti denominato riferimenti a oggetti di blocco nella cache da un chiamante - riferimento non aggiornato verrà rilevato e aggiornata la prossima volta che si tenta di bloccare e allocare un nuovo oggetto di blocco.

Utilizziamo una funzionalità euristica ora semplice in base a pulire gli oggetti inutilizzati del blocco.In ogni n denominato chiamate di rilascio del blocco che viene controllato se vi è un'ora per eseguire la pulitura e quindi esaminare il dizionario e raccogliere tutti gli oggetti senza riferimenti non utilizzati di recente.Quindi si cerca di eliminare ogni oggetto e rimuovere il riferimento da un dizionario.Pulitura è per ogni partizione del dizionario, in modo che non è necessario bloccare altre partizioni quando eseguiamo una pulitura 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