ReaderWriterLockSlim.EnterReadLock Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.
O objeto ReaderWriterLockSlim foi descartado.
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.