Partager via


ReaderWriterLockSlim.EnterReadLock Méthode

Définition

Essaie d'entrer le verrou en mode lecture.

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

Exceptions

La propriété RecursionPolicy est NoRecursion, et le thread actuel a tenté d’acquérir le verrou en lecture alors qu’il le détient déjà.

- ou -

La propriété RecursionPolicy est NoRecursion, et le thread actuel a tenté d’acquérir le verrou en lecture alors qu’il détient déjà le verrou en écriture.

- ou -

Le nombre de récursivités dépasserait la capacité du compteur. Cette limite est si élevée que les applications ne devraient normalement jamais rencontrer cette exception.

L’objet ReaderWriterLockSlim a été supprimé.

Exemples

L’exemple suivant montre comment utiliser la EnterReadLock méthode pour entrer le verrou en mode lecture. La méthode illustrée dans l’exemple récupère la valeur associée à une clé. Si la clé est introuvable, 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 ExitReadLock méthode, ce qui garantit que l’appelant quitte le mode lecture.

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 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

Remarques

Cette méthode bloque jusqu’à ce que le thread appelant entre dans le verrou et peut donc ne jamais revenir. Utilisez la TryEnterReadLock méthode pour bloquer pendant un intervalle spécifié, puis retournez si le thread appelant n’est pas entré en mode lecture pendant cet intervalle.

Plusieurs threads peuvent passer en mode lecture en même temps.

Si un ou plusieurs threads attendent d’entrer en mode écriture, un thread qui appelle la EnterReadLock méthode bloque jusqu’à ce que ces threads aient expiré ou entré en mode d’écriture, puis s’en soient retirés.

Notes

Si un verrou autorise la récursivité, un thread qui est entré en mode lecture peut passer en mode lecture de manière récursive, même si d’autres threads attendent d’entrer en mode écriture.

Tout au plus un thread peut être en mode mise à niveau tandis que d’autres threads sont en mode lecture. Si d’autres threads attendent d’entrer en mode mise à niveau et qu’aucun thread n’attend d’entrer en mode écriture, les threads qui appellent la EnterReadLock méthode passent immédiatement en mode lecture et ne bloquent pas.

S’applique à