ReaderWriterLockSlim.EnterWriteLock Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Essaie d'entrer le verrou en mode écriture.
public:
void EnterWriteLock();
public void EnterWriteLock ();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()
Exceptions
La propriété RecursionPolicy est NoRecursion et le thread actuel a déjà entré le verrou dans un mode quelconque.
- ou -
Le thread actuel est entré en mode lecture et n’a pas de verrou en écriture. Une tentative d’entrer le verrou en mode écriture risquerait donc de créer un interblocage.
- ou -
Le nombre de récursivités dépasserait la capacité du compteur. Cette limite est si élevée que les applications ne doivent jamais la rencontrer.
L’objet ReaderWriterLockSlim a été supprimé.
Exemples
L’exemple suivant montre comment utiliser la EnterWriteLock méthode pour entrer le verrou en mode écriture. La méthode présentée dans l’exemple ajoute une nouvelle paire clé/valeur au cache synchronisé. Si la clé se trouve déjà dans le cache, l’exception levée par l’interne Dictionary<TKey,TValue> est autorisée à arrêter la méthode. Un finally
bloc est utilisé pour exécuter la ExitWriteLock méthode, ce qui garantit que l’appelant quitte le mode d’écriture.
Ce code fait partie d’un exemple plus large fourni pour la 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
Remarques
Cette méthode se bloque jusqu’à ce que le thread appelant entre dans le verrou et peut donc ne jamais revenir. Utilisez la TryEnterWriteLock méthode pour bloquer pour un intervalle spécifié, puis retournez si le thread appelant n’est pas entré en mode écriture pendant cet intervalle.
Si d’autres threads sont entrés dans le verrou en mode lecture, un thread qui appelle la EnterWriteLock méthode se bloque jusqu’à ce que ces threads aient quitté le mode lecture. Quand des threads attendent d’entrer en mode écriture, d’autres threads qui tentent d’entrer en mode lecture ou en mode pouvant être mis à niveau se bloquent jusqu’à ce que tous les threads en attente d’entrer en mode écriture ont expiré ou sont entrés en mode écriture, puis se sont retirés de celui-ci.
Notes
Si un verrou autorise la récursivité, un thread qui est entré dans le verrou en mode écriture peut passer en mode écriture de manière récursive, même si d’autres threads attendent d’entrer en mode écriture.