LockRecursionException LockRecursionException LockRecursionException LockRecursionException Class

Définition

L'exception levée lorsque l'entrée récursive dans un verrou n'est pas compatible avec la stratégie de récurrence pour le verrou.The exception that is thrown when recursive entry into a lock is not compatible with the recursion policy for the lock.

public ref class LockRecursionException : Exception
[System.Serializable]
public class LockRecursionException : Exception
type LockRecursionException = class
    inherit Exception
Public Class LockRecursionException
Inherits Exception
Héritage
LockRecursionExceptionLockRecursionExceptionLockRecursionExceptionLockRecursionException
Attributs

Exemples

L’exemple suivant illustre deux causes de LockRecursionException l’utilisation de ReaderWriterLockSlim la classe.The following example shows two causes of LockRecursionException when using the ReaderWriterLockSlim class. Le programme crée un ReaderWriterLockSlim à l’aide du constructeur sans paramètre, qui interdit la récursivité.The program creates a ReaderWriterLockSlim by using the parameterless constructor, which disallows recursion. Le programme démarre ensuite un thread qui entre le verrou en mode lecture.The program then starts a thread that enters the lock in read mode. Le thread tente d’entrer le verrou de manière récursive en mode lecture et intercepte l’exception résultante.The thread tries to enter the lock recursively in read mode, and catches the resulting exception. Enfin, le thread tente d’entrer en mode écriture, ce qui crée un potentiel pour les blocages.Finally, the thread tries to enter write mode, which would create a potential for deadlocks. Le thread intercepte l’exception résultante.The thread catches the resulting exception.

using System;
using System.Threading;

class Example
{
    // By default, the lock recursion policy for a new 
    // ReaderWriterLockSlim does not allow recursion.
    static ReaderWriterLockSlim rwls = new ReaderWriterLockSlim();

    static void ThreadProc()
    {
        Console.WriteLine("Acquire the reader lock.");
        rwls.EnterReadLock();

        try
        {
            Console.WriteLine("\nAttempt to acquire the reader lock recursively:");
            rwls.EnterReadLock();
        }
        catch (LockRecursionException lre)
        {
            Console.WriteLine("{0}: {1}", 
                lre.GetType().Name, lre.Message);
        }

        try
        {
            Console.WriteLine("\nAttempt to acquire the writer lock recursively:");
            rwls.EnterWriteLock();
        }
        catch (LockRecursionException lre)
        {
            Console.WriteLine("{0}: {1}", 
                lre.GetType().Name, lre.Message);
        }
    }

    static void Main()
    {
        Thread t = new Thread(ThreadProc);
        t.Start();
        t.Join();
    }
}

/* This code example produces output similar to the following:

Acquire the reader lock.

Attempt to acquire the reader lock recursively:
LockRecursionException: Recursive read lock acquisitions not allowed in this mode.

Attempt to acquire the writer lock recursively:
LockRecursionException: Write lock may not be acquired with read lock held. This pattern is prone to deadlocks. Consider using the upgrade lock.
 */
Imports System.Threading

Class Example
    ' By default, the lock recursion policy for a new 
    ' ReaderWriterLockSlim does not allow recursion.
    Private Shared rwls As New ReaderWriterLockSlim()
    
    Shared Sub ThreadProc() 
        Console.WriteLine("Acquire the reader lock.")
        rwls.EnterReadLock()
        
        Try
            Console.WriteLine(vbCrLf & _
                "Attempt to acquire the reader lock recursively:")
            rwls.EnterReadLock()
        Catch lre As LockRecursionException
            Console.WriteLine("{0}: {1}", _
                lre.GetType().Name, lre.Message)
        End Try
        
        Try
            Console.WriteLine(vbCrLf & _
                "Attempt to acquire the writer lock recursively:")
            rwls.EnterWriteLock()
        Catch lre As LockRecursionException
            Console.WriteLine("{0}: {1}", _
                lre.GetType().Name, lre.Message)
        End Try
    
    End Sub 
    
    Shared Sub Main() 

        Dim t As New Thread(AddressOf ThreadProc)
        t.Start()
        t.Join()
    
    End Sub 
End Class 

' This code example produces output similar to the following:
'
'Acquire the reader lock.
'
'Attempt to acquire the reader lock recursively:
'LockRecursionException: Recursive read lock acquisitions not allowed in this mode.
'
'Attempt to acquire the writer lock recursively:
'LockRecursionException: Write lock may not be acquired with read lock held. This pattern is prone to deadlocks. Consider using the upgrade lock.
' 

Remarques

LockRecursionExceptionest levée pour plusieurs raisons, y compris les suivantes:LockRecursionException is thrown for several reasons, including the following:

  • Si un thread essaie d’entrer une instance de ReaderWriterLockSlim manière récursive, mais que l’instance ne prend pas en charge la récursivité.If a thread tries to enter an instance of ReaderWriterLockSlim recursively, but the instance does not support recursion.

  • Si un thread essaie d’entrer dans ReaderWriterLockSlim une instance en mode écriture ou en mode de mise à niveau lorsque le thread a initialement entré le verrou en mode lecture.If a thread tries to enter a ReaderWriterLockSlim instance in write mode or upgradeable mode when the thread initially entered the lock in read mode. Cela représente un blocage potentiel et n’est donc pas autorisé.This represents a potential deadlock and therefore is not allowed.

  • Si l’autorisation d’un niveau supplémentaire de récurrence dépasserait la valeur maximale du compteur de stockage interne utilisé pour suivre les récurrences.If allowing one more level of recursion would exceed the maximum value for the internal storage counter used to track recursions. Cette limite est si élevée que les applications ne doivent jamais la rencontrer.This limit is so large that applications should never encounter it.

Constructeurs

LockRecursionException() LockRecursionException() LockRecursionException() LockRecursionException()

Initialise une nouvelle instance de la classe LockRecursionException avec un message système qui décrit l'erreur.Initializes a new instance of the LockRecursionException class with a system-supplied message that describes the error.

LockRecursionException(SerializationInfo, StreamingContext) LockRecursionException(SerializationInfo, StreamingContext) LockRecursionException(SerializationInfo, StreamingContext) LockRecursionException(SerializationInfo, StreamingContext)

Initialise une nouvelle instance de la classe LockRecursionException avec des données sérialisées.Initializes a new instance of the LockRecursionException class with serialized data.

LockRecursionException(String) LockRecursionException(String) LockRecursionException(String) LockRecursionException(String)

Initialise une nouvelle instance de la classe LockRecursionException avec un message spécifié décrivant l'erreur.Initializes a new instance of the LockRecursionException class with a specified message that describes the error.

LockRecursionException(String, Exception) LockRecursionException(String, Exception) LockRecursionException(String, Exception) LockRecursionException(String, Exception)

Initialise une nouvelle instance de la classe LockRecursionException avec un message d'erreur spécifié et une référence à l'exception interne ayant provoqué cette exception.Initializes a new instance of the LockRecursionException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Propriétés

Data Data Data Data

Obtient une collection de paires clé/valeur qui fournissent des informations supplémentaires définies par l’utilisateur sur l’exception.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
HelpLink HelpLink HelpLink HelpLink

Obtient ou définit un lien vers le fichier d'aide associé à cette exception.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Obtient ou définit HRESULT, valeur numérique codée qui est assignée à une exception spécifique.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Obtient l'instance Exception qui a provoqué l'exception actuelle.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Obtient un message qui décrit l'exception actuelle.Gets a message that describes the current exception.

(Inherited from Exception)
Source Source Source Source

Obtient ou définit le nom de l'application ou de l'objet qui est à l'origine de l'erreur.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Obtient une représentation sous forme de chaîne des frames immédiats sur la pile des appels.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Obtient la méthode qui lève l'exception actuelle.Gets the method that throws the current exception.

(Inherited from Exception)

Méthodes

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

En cas de substitution dans une classe dérivée, retourne la Exception qui est à l'origine d'une ou de plusieurs exceptions ultérieures.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fait office de fonction de hachage par défaut.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

En cas de substitution dans une classe dérivée, définit SerializationInfo avec des informations sur l'exception.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Inherited from Exception)
GetType() GetType() GetType() GetType()

Obtient le type au moment de l'exécution de l'instance actuelle.Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Crée et retourne une chaîne représentant l'exception actuelle.Creates and returns a string representation of the current exception.

(Inherited from Exception)

Événements

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Se produit quand une exception est sérialisée pour créer un objet d'état d'exception qui contient des données sérialisées concernant l'exception.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

S’applique à

Voir aussi