ReaderWriterLockSlim.EnterWriteLock Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Prova a immettere il blocco in modalità scrittura.
public:
void EnterWriteLock();
public void EnterWriteLock();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()
Eccezioni
La RecursionPolicy proprietà è NoRecursion e il thread corrente ha già immesso il blocco in qualsiasi modalità.
oppure
Il thread corrente è entrato in modalità di lettura e non è già proprietario di un blocco di scrittura, quindi il tentativo di immettere il blocco in modalità di scrittura creerebbe la possibilità di un deadlock.
oppure
Il numero di ricorsione supera la capacità del contatore. Il limite è così elevato che le applicazioni non devono mai incontrarlo.
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> può terminare il metodo . Viene usato un finally blocco per eseguire il ExitWriteLock metodo, assicurandosi che il chiamante esce dalla modalità di scrittura.
Questo codice fa parte di un esempio più ampio 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 non entra nel blocco e pertanto potrebbe non restituire mai. Utilizzare il TryEnterWriteLock metodo per bloccare per un intervallo specificato e quindi restituire se il thread chiamante non è entrato in 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 terminato la modalità di lettura. Quando sono presenti thread in attesa di entrare in modalità di scrittura, altri thread che tentano di accedere alla modalità di lettura o alla modalità aggiornabile fino a quando tutti i thread in attesa di attivare la modalità di scrittura hanno timeout o immesso la modalità di scrittura e quindi sono stati chiusi da esso.
Note
Se un blocco consente la ricorsione, un thread che ha immesso il blocco in modalità di scrittura può entrare in modalità di scrittura in modo ricorsivo, anche se altri thread sono in attesa di attivare la modalità di scrittura.