ReaderWriterLockSlim.EnterWriteLock Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Tenta entrar no bloqueio em modo de escrita.
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á entrou no bloqueio em qualquer modo.
-ou-
O thread atual entrou em modo de leitura e ainda não possui um bloqueio de escrita, por isso tentar entrar no bloqueio em modo de escrita criaria a possibilidade de um deadlock.
-ou-
O número de recursão excederia a capacidade do contador. O limite é tão grande que as aplicações nunca o deverão encontrar.
O ReaderWriterLockSlim objeto foi descartado.
Exemplos
O exemplo seguinte mostra como usar o EnterWriteLock método para entrar no bloqueio em modo de escrita. O método mostrado no exemplo adiciona um novo par chave/valor à cache sincronizada. Se a chave já estiver na cache, a exceção lançada pelo interior Dictionary<TKey,TValue> pode terminar o método. Um bloco é usado para executar o ExitWriteLock método, garantindo que o chamador sai do finally modo de escrita.
Este código faz parte de um exemplo mais amplo fornecido para a ReaderWriterLockSlim turma.
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
Observações
Este método bloqueia até que o thread que chama entre no bloqueio e, portanto, pode nunca mais regressar. Use o TryEnterWriteLock método para bloquear durante um intervalo especificado e depois retorne se a thread que chama não tiver entrado em modo de escrita durante esse intervalo.
Se outros threads entraram no lock em modo de leitura, um thread que chama o EnterWriteLock método bloqueia-se até que esses threads saiam do modo de leitura. Quando há threads à espera de entrar no modo de escrita, as threads adicionais que tentam entrar no modo de leitura ou modo atualizável bloqueiam até que todas as threads à espera de entrar no modo de escrita tenham expirado o tempo ou entrado no modo de escrita e depois saído desse modo.
Note
Se um bloqueio permitir recursão, um thread que entrou no lock em modo de escrita pode entrar no modo de escrita recursivamente, mesmo que outros threads estejam à espera de entrar no modo de escrita.