LockRecursionException LockRecursionException LockRecursionException LockRecursionException Class

Definizione

Eccezione generata quando una voce ricorsiva in un blocco non è compatibile con i criteri di ricorsione per tale blocco.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
Ereditarietà
LockRecursionExceptionLockRecursionExceptionLockRecursionExceptionLockRecursionException
Attributi

Esempi

Nell'esempio seguente vengono illustrate due LockRecursionException cause di quando ReaderWriterLockSlim si utilizza la classe.The following example shows two causes of LockRecursionException when using the ReaderWriterLockSlim class. Il programma crea un ReaderWriterLockSlim oggetto usando il costruttore senza parametri, che non consente la ricorsione.The program creates a ReaderWriterLockSlim by using the parameterless constructor, which disallows recursion. Il programma avvia quindi un thread che accede al blocco in modalità lettura.The program then starts a thread that enters the lock in read mode. Il thread tenta di accedere al blocco in modo ricorsivo in modalità di lettura e rileva l'eccezione risultante.The thread tries to enter the lock recursively in read mode, and catches the resulting exception. Infine, il thread tenta di accedere alla modalità di scrittura, che creerebbe un potenziale deadlock.Finally, the thread tries to enter write mode, which would create a potential for deadlocks. Il thread intercetta l'eccezione risultante.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.
' 

Commenti

LockRecursionExceptionviene generata per diversi motivi, inclusi i seguenti:LockRecursionException is thrown for several reasons, including the following:

  • Se un thread tenta di accedere a un'istanza ReaderWriterLockSlim di in modo ricorsivo, ma l'istanza non supporta la ricorsione.If a thread tries to enter an instance of ReaderWriterLockSlim recursively, but the instance does not support recursion.

  • Se un thread tenta di accedere a ReaderWriterLockSlim un'istanza in modalità di scrittura o in modalità aggiornabile quando il thread ha inizialmente acceduto al blocco in modalità lettura.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. Questo rappresenta un potenziale deadlock e pertanto non è consentito.This represents a potential deadlock and therefore is not allowed.

  • Se consentire un ulteriore livello di ricorsione supererà il valore massimo per il contatore di archiviazione interno utilizzato per tenere traccia delle ricorsioni.If allowing one more level of recursion would exceed the maximum value for the internal storage counter used to track recursions. Questo limite è talmente elevato che le applicazioni non dovrebbero mai raggiungerlo.This limit is so large that applications should never encounter it.

Costruttori

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

Inizializza una nuova istanza della classe LockRecursionException con un messaggio fornito dal sistema in cui viene descritto l'errore.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)

Inizializza una nuova istanza della classe LockRecursionException con dati serializzati.Initializes a new instance of the LockRecursionException class with serialized data.

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

Inizializza una nuova istanza della classe LockRecursionException con un messaggio specificato in cui viene descritto l'errore.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)

Inizializza una nuova istanza della classe LockRecursionException con un messaggio di errore specificato e un riferimento all'eccezione interna che è la causa dell'eccezione corrente.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.

Proprietà

Data Data Data Data

Ottiene una raccolta di coppie chiave-valore che fornisce informazioni aggiuntive definite dall'utente relative all'eccezione.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
HelpLink HelpLink HelpLink HelpLink

Ottiene o imposta un collegamento al file della Guida associato all'eccezione.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato a un'eccezione specifica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Ottiene l'istanza di Exception che ha causato l'eccezione corrente.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Ottiene un messaggio che descrive l'eccezione corrente.Gets a message that describes the current exception.

(Inherited from Exception)
Source Source Source Source

Ottiene o imposta il nome dell'oggetto o dell'applicazione che ha generato l'errore.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Ottiene una rappresentazione di stringa dei frame immediati nello stack di chiamate.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Ottiene il metodo che genera l'eccezione corrente.Gets the method that throws the current exception.

(Inherited from Exception)

Metodi

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

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

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

Se utilizzato come metodo di override in una classe derivata, restituisce l'Exception che è la causa radice di una o più eccezioni successive.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()

Funge da funzione hash predefinita.Serves as the default hash function.

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

Quando l'override viene eseguito in una classe derivata, imposta il controllo SerializationInfo per la colonna.When overridden in a derived class, sets the SerializationInfo with information about the exception.

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

Ottiene il tipo di runtime dell'istanza corrente.Gets the runtime type of the current instance.

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

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

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

Crea e restituisce una rappresentazione di stringa dell'eccezione corrente.Creates and returns a string representation of the current exception.

(Inherited from Exception)

Eventi

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Si verifica quando un'eccezione viene serializzata per creare un oggetto di stato eccezione contenente i dati serializzati relativi all'eccezione.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Si applica a

Vedi anche