Compartilhar via


ReaderWriterLockSlim.EnterWriteLock Método

Definição

Tenta entrar no bloqueio em modo de gravação.

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

Exceções

A propriedade RecursionPolicy é NoRecursion e o thread atual já entrou no bloqueio em qualquer modo.

- ou - O thread atual entrou no modo de leitura e ainda não tem um bloqueio de gravação. Portanto, tentar entrar no bloqueio em modo de gravação criará a possibilidade de um deadlock.

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

Exemplos

O exemplo a seguir mostra como usar o EnterWriteLock método para inserir o bloqueio no modo de gravação. O método mostrado no exemplo adiciona um novo par chave/valor ao cache sincronizado. Se a chave já estiver no cache, a exceção gerada pelo interior Dictionary<TKey,TValue> poderá encerrar o método. Um finally bloco é usado para executar o ExitWriteLock método, garantindo que o chamador saia do modo de gravação.

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 void Add(int key, string value)
{
    cacheLock.EnterWriteLock();
    try
    {
        innerCache.Add(key, value);
    }
    finally
    {
        cacheLock.ExitWriteLock();
    }
}
Public Sub Add(ByVal key As Integer, ByVal value As String)
    cacheLock.EnterWriteLock()
    Try
        innerCache.Add(key, value)
    Finally
        cacheLock.ExitWriteLock()
    End Try
End Sub

Comentários

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

Se outros threads tiverem inserido o bloqueio no modo de leitura, um thread que chama o EnterWriteLock método é bloqueado até que esses threads tenham saído do modo de leitura. Quando há threads esperando para entrar no modo de gravação, threads adicionais que tentam entrar no modo de leitura ou no modo atualizável bloqueiam até que todos os threads que estão esperando para entrar no modo de gravação tenham cronometrado ou inserido no modo de gravação e, em seguida, saídos dele.

Observação

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

Aplica-se a