Compartir vía


ReaderWriterLockSlim.EnterReadLock Método

Definición

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.

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.

Se aplica a