ReaderWriterLockSlim.EnterWriteLock Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Intenta entrar en el bloqueo en modo de escritura.
public:
void EnterWriteLock();
public void EnterWriteLock ();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()
Excepciones
La propiedad RecursionPolicy es NoRecursion y el subproceso actual ya ha entrado en el bloqueo en cualquier modo.
o bien
El subproceso actual ha entrado en modo de lectura y ya no posee un bloqueo de escritura, por lo que, si se intenta entrar en el bloqueo en modo de escritura, existiría la posibilidad de un interbloqueo.
o bien
El número de recursividad superaría la capacidad del contador. El límite es tan amplio que las aplicaciones nunca deben alcanzarlo.
Se eliminó el objeto ReaderWriterLockSlim.
Ejemplos
En el ejemplo siguiente se muestra cómo usar el EnterWriteLock método para entrar en el bloqueo en modo de escritura. El método que se muestra en el ejemplo agrega un nuevo par clave-valor a la memoria caché sincronizada. Si la clave ya está en la memoria caché, se permite que la excepción producida por el elemento interno Dictionary<TKey,TValue> finalice el método . Se usa un finally
bloque para ejecutar el ExitWriteLock método , lo que garantiza que el autor de la llamada salga del modo de escritura.
Este código forma parte de un ejemplo más grande proporcionado para la ReaderWriterLockSlim clase .
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
Comentarios
Este método se bloquea hasta que el subproceso que realiza la llamada entra en el bloqueo y, por tanto, puede que nunca se devuelva. Use el TryEnterWriteLock método para bloquear un intervalo especificado y, a continuación, devuelva si el subproceso que realiza la llamada no ha entrado en modo de escritura durante ese intervalo.
Si otros subprocesos han entrado en el bloqueo en modo de lectura, un subproceso que llama al EnterWriteLock método se bloquea hasta que esos subprocesos hayan salido del modo de lectura. Cuando hay subprocesos que esperan entrar en modo de escritura, los subprocesos adicionales que intentan entrar en modo de lectura o el bloque de modo actualizable hasta que todos los subprocesos que esperan entrar en modo de escritura han agotado el tiempo de espera o han entrado en modo de escritura y, a continuación, se han salido de él.
Nota
Si un bloqueo permite la recursividad, un subproceso que ha entrado en el bloqueo en modo de escritura puede entrar en modo de escritura de forma recursiva, incluso si otros subprocesos están esperando entrar en modo de escritura.