Compartilhar via


ReaderWriterLockSlim.EnterReadLock Método

Definição

Tenta entrar no bloqueio em modo de leitura.

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

Exceções

A propriedade RecursionPolicy é NoRecursion e o thread atual tentou adquirir o bloqueio de leitura quando ele já retinha o bloqueio de leitura.

- ou - A propriedade RecursionPolicy é NoRecursion e o thread atual tentou adquirir o bloqueio de leitura quando ele já retinha o bloqueio de gravação.

- ou - O número de recursão excederia a capacidade do contador. O limite é tão grande que os aplicativos nunca devem encontrar essa exceção.

Exemplos

O exemplo a seguir mostra como usar o EnterReadLock método para inserir o bloqueio no modo de leitura. O método mostrado no exemplo recupera o valor associado a uma chave. Se a chave não for encontrada, a exceção gerada pelo interior Dictionary<TKey,TValue> poderá encerrar o método. Um finally bloco é usado para executar o ExitReadLock método, garantindo que o chamador saia do modo de leitura.

Esse código faz parte de um exemplo maior fornecido para a 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 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

Comentários

Esse método bloqueia até que o thread de chamada insira o bloqueio e, portanto, pode nunca retornar. Use o TryEnterReadLock método para bloquear um intervalo especificado e retorne se o thread de chamada não tiver inserido o modo de leitura durante esse intervalo.

Vários threads podem entrar no modo de leitura ao mesmo tempo.

Se um ou mais threads estiverem esperando para entrar no modo de gravação, um thread que chama o EnterReadLock método é bloqueado até que esses threads tenham atingido o tempo limite ou inserido no modo de gravação e, em seguida, saído dele.

Observação

Se um bloqueio permitir a recursão, um thread que inseriu o bloqueio no modo de leitura poderá entrar no modo de leitura recursivamente, mesmo que outros threads estejam esperando para entrar no modo de gravação.

No máximo, um thread pode estar no modo atualizável enquanto outros threads estão no modo de leitura. Se threads adicionais estiverem esperando para entrar no modo atualizável e não houver threads esperando para entrar no modo de gravação, os threads que chamam o EnterReadLock método entram no modo de leitura imediatamente e não bloqueiam.

Aplica-se a