ReaderWriterLockSlim.EnterReadLock 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 lectura.
public:
void EnterReadLock();
public void EnterReadLock ();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
Excepciones
La propiedad RecursionPolicy es NoRecursion y el subproceso actual ha intentado adquirir el bloqueo de lectura cuando ya lo tenía.
o bien
La propiedad RecursionPolicy es NoRecursion y el subproceso actual ha intentado adquirir el bloqueo de lectura cuando ya tenía el bloqueo de escritura.
o bien
El número de recursividad superaría la capacidad del contador. Este límite es tan grande que en las aplicaciones no debe aparecer nunca esta excepción.
Se eliminó el objeto ReaderWriterLockSlim.
Ejemplos
En el ejemplo siguiente se muestra cómo usar el EnterReadLock método para entrar en el bloqueo en modo de lectura. El método que se muestra en el ejemplo recupera el valor asociado a una clave. Si no se encuentra la clave, 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 ExitReadLock método , lo que garantiza que el autor de la llamada salga del modo de lectura.
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 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
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 TryEnterReadLock 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 lectura durante ese intervalo.
Varios subprocesos pueden entrar en modo de lectura al mismo tiempo.
Si uno o varios subprocesos están esperando entrar en modo de escritura, un subproceso que llama al EnterReadLock método se bloquea hasta que esos subprocesos hayan agotado el tiempo de espera o hayan entrado en modo de escritura y, a continuación, se salgan de él.
Nota
Si un bloqueo permite la recursividad, un subproceso que ha entrado en el bloqueo en modo de lectura puede entrar en modo de lectura de forma recursiva, incluso si otros subprocesos están esperando entrar en modo de escritura.
Como máximo, un subproceso puede estar en modo actualizable, mientras que otros subprocesos están en modo de lectura. Si hay subprocesos adicionales a la espera de entrar en modo actualizable y no hay subprocesos que esperan entrar en modo de escritura, los subprocesos que llaman al EnterReadLock método entran en modo de lectura inmediatamente y no se bloquean.