ReaderWriterLockSlim.EnterWriteLock 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 inserir o bloqueio no modo de gravação.
public:
void EnterWriteLock();
public void EnterWriteLock();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()
Exceções
A RecursionPolicy propriedade é NoRecursion e o thread atual já inseriu o bloqueio em qualquer modo.
-ou-
O thread atual entrou no modo de leitura e ainda não possui um bloqueio de gravação, portanto, tentar inserir o bloqueio no modo de gravação criaria 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 devem encontrar ele.
O ReaderWriterLockSlim objeto foi descartado.
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 pela parte interna 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, talvez nunca retorne. Use o TryEnterWriteLock método para bloquear um intervalo especificado e retorne se o thread de chamada não tiver inserido o 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 bloqueia até que esses threads tenham saído do modo de leitura. Quando há threads aguardando para entrar no modo de gravação, threads adicionais que tentam inserir o modo de leitura ou o bloco de modo atualizável até que todos os threads que aguardam para entrar no modo de gravação tenham cronometrado ou inserido no modo de gravação e, em seguida, encerrados dele.
Note
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 aguardando para entrar no modo de gravação.