Condividi tramite


ReaderWriterLockSlim.EnterReadLock Metodo

Definizione

Prova ad attivare il blocco in modalità lettura.

public:
 void EnterReadLock();
public void EnterReadLock ();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()

Eccezioni

La proprietà RecursionPolicy è NoRecursion e il thread corrente ha tentato di acquisire il blocco di lettura quando contiene già il blocco di lettura.

-oppure-

La proprietà RecursionPolicy è NoRecursion e il thread corrente ha tentato di acquisire il blocco di lettura quando contiene già il blocco di scrittura.

-oppure-

Il numero di ricorsioni supererebbe la capacità del contatore. Questo limite è talmente elevato che questa eccezione non dovrebbe essere mai riscontrata.

L'oggetto ReaderWriterLockSlim è stato eliminato.

Esempio

Nell'esempio seguente viene illustrato come usare il metodo per immettere il EnterReadLock blocco in modalità di lettura. Il metodo illustrato nell'esempio recupera il valore associato a una chiave. Se la chiave non viene trovata, l'eccezione generata dall'interno Dictionary<TKey,TValue> è consentita per terminare il metodo. Viene usato un finally blocco per eseguire il ExitReadLock metodo, assicurandosi che il chiamante esca dalla modalità di lettura.

Questo codice fa parte di un esempio più grande fornito per la ReaderWriterLockSlim classe.

private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public string Read(int key)
{
    cacheLock.EnterReadLock();
    try
    {
        return innerCache[key];
    }
    finally
    {
        cacheLock.ExitReadLock();
    }
}
Public Function Read(ByVal key As Integer) As String
    cacheLock.EnterReadLock()
    Try
        Return innerCache(key)
    Finally
        cacheLock.ExitReadLock()
    End Try
End Function

Commenti

Questo metodo blocca fino a quando il thread chiamante entra nel blocco e quindi potrebbe non restituire mai. Utilizzare il TryEnterReadLock metodo per bloccare per un intervallo specificato e quindi restituire se il thread chiamante non ha immesso la modalità di lettura durante tale intervallo.

Più thread possono immettere la modalità di lettura contemporaneamente.

Se uno o più thread sono in attesa di immettere la modalità di scrittura, un thread che chiama i blocchi del EnterReadLock metodo fino a quando tali thread non hanno timeout o immesso la modalità di scrittura e quindi sono usciti da esso.

Nota

Se un blocco consente la ricorsione, un thread che ha immesso il blocco in modalità di lettura può immettere la modalità di lettura ricorsivamente, anche se altri thread sono in attesa di immettere la modalità di scrittura.

Al massimo un thread può essere in modalità aggiornabile mentre altri thread sono in modalità di lettura. Se i thread aggiuntivi sono in attesa di immettere la modalità aggiornabile e non sono presenti thread in attesa di immettere la modalità di scrittura, i thread che chiamano il metodo immettono immediatamente la EnterReadLock modalità di lettura e non bloccano.

Si applica a