Condividi tramite


ReaderWriterLockSlim.EnterWriteLock Metodo

Definizione

Prova ad attivare il blocco in modalità scrittura.

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

Eccezioni

La proprietà RecursionPolicy è NoRecursion e il thread corrente ha già acceduto al blocco in tutte le modalità.

-oppure-

Il thread corrente ha acceduto alla modalità di lettura e non possiede già un blocco in scrittura, pertanto il tentativo di accedere al blocco in modalità di scrittura creerebbe la possibilità di un deadlock.

-oppure-

Il numero di ricorsioni supererebbe la capacità del contatore. Il limite è talmente elevato che le applicazioni non dovrebbero mai raggiungerlo.

L'oggetto ReaderWriterLockSlim è stato eliminato.

Esempio

Nell'esempio seguente viene illustrato come usare il metodo per immettere il EnterWriteLock blocco in modalità di scrittura. Il metodo illustrato nell'esempio aggiunge una nuova coppia chiave/valore alla cache sincronizzata. Se la chiave è già presente nella cache, l'eccezione generata dall'interno Dictionary<TKey,TValue> è consentita per terminare il metodo. Un finally blocco viene usato per eseguire il ExitWriteLock metodo, assicurandosi che il chiamante esca dalla modalità di scrittura.

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 void Add(int key, string value)
{
    cacheLock.EnterWriteLock();
    try
    {
        innerCache.Add(key, value);
    }
    finally
    {
        cacheLock.ExitWriteLock();
    }
}
Public Sub Add(ByVal key As Integer, ByVal value As String)
    cacheLock.EnterWriteLock()
    Try
        innerCache.Add(key, value)
    Finally
        cacheLock.ExitWriteLock()
    End Try
End Sub

Commenti

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

Se altri thread hanno immesso il blocco in modalità di lettura, un thread che chiama i blocchi del EnterWriteLock metodo fino a quando tali thread non hanno chiuso la modalità di lettura. Quando ci sono thread in attesa di immettere la modalità di scrittura, thread aggiuntivi che tentano di immettere la modalità di lettura o il blocco in modalità aggiornabile fino a quando tutti i thread in attesa di immettere la modalità di scrittura hanno timeout o immesso in 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 scrittura può immettere la modalità di scrittura ricorsivamente, anche se altri thread sono in attesa di immettere la modalità di scrittura.

Si applica a