ReaderWriterLockSlim.EnterReadLock Método

Definição

Tenta inserir o bloqueio no modo de leitura.

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

Exceções

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

-ou-

A RecursionPolicy propriedade é NoRecursion, e o thread atual tentou adquirir o bloqueio de leitura quando ele já mantém o bloqueio de gravação.

-ou-

O número de recursão excederia a capacidade do contador. Esse 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, talvez nunca retorne. 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 aguardando para entrar no modo de gravação, um thread que chama o EnterReadLock método bloqueia até que esses threads tenham cronometrado ou inserido o modo de gravação e, em seguida, saído dele.

Note

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 aguardando 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 aguardando para entrar no modo atualizável e não houver threads aguardando 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