LockRecursionException Clase

Definición

Excepción que se inicia cuando la entrada recursiva en un bloqueo no es compatible con la directiva de recursión del bloqueo.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
Herencia
LockRecursionException
Atributos

Ejemplos

En el ejemplo siguiente se muestran dos causas de LockRecursionException al utilizar la clase ReaderWriterLockSlim.The following example shows two causes of LockRecursionException when using the ReaderWriterLockSlim class. El programa crea un ReaderWriterLockSlim mediante el constructor sin parámetros, que no permite la recursividad.The program creates a ReaderWriterLockSlim by using the parameterless constructor, which disallows recursion. Después, el programa inicia un subproceso que entra en el bloqueo en modo de lectura.The program then starts a thread that enters the lock in read mode. El subproceso intenta entrar en el bloqueo de forma recursiva en modo de lectura y detecta la excepción resultante.The thread tries to enter the lock recursively in read mode, and catches the resulting exception. Por último, el subproceso intenta entrar en el modo de escritura, lo que podría crear un posible para los interbloqueos.Finally, the thread tries to enter write mode, which would create a potential for deadlocks. El subproceso detecta la excepción resultante.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.
' 

Comentarios

LockRecursionException se produce por varios motivos, entre los que se incluyen los siguientes:LockRecursionException is thrown for several reasons, including the following:

  • Si un subproceso intenta entrar en una instancia de ReaderWriterLockSlim de forma recursiva, pero la instancia no admite la recursividad.If a thread tries to enter an instance of ReaderWriterLockSlim recursively, but the instance does not support recursion.

  • Si un subproceso intenta entrar en un ReaderWriterLockSlim instancia en modo de escritura o en modo de actualización cuando el subproceso entró inicialmente en el bloqueo en modo de lectura.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. Esto representa un posible interbloqueo y, por tanto, no se permite.This represents a potential deadlock and therefore is not allowed.

  • Si permitir un nivel más de recursividad superaría el valor máximo del contador de almacenamiento interno usado para realizar el seguimiento de las repeticiones.If allowing one more level of recursion would exceed the maximum value for the internal storage counter used to track recursions. Este límite es tan amplio que las aplicaciones nunca deberían alcanzarlo.This limit is so large that applications should never encounter it.

Constructores

LockRecursionException()

Inicializa una nueva instancia de la clase LockRecursionException con un mensaje proporcionado por el sistema que describe el error.Initializes a new instance of the LockRecursionException class with a system-supplied message that describes the error.

LockRecursionException(SerializationInfo, StreamingContext)

Inicializa una nueva instancia de la clase LockRecursionException con datos serializados.Initializes a new instance of the LockRecursionException class with serialized data.

LockRecursionException(String)

Inicializa una nueva instancia de la clase LockRecursionException con un mensaje especificado que describe el error.Initializes a new instance of the LockRecursionException class with a specified message that describes the error.

LockRecursionException(String, Exception)

Inicializa una nueva instancia de la clase LockRecursionException con el mensaje de error especificado y una referencia a la excepción interna que representa la causa de esta excepción.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.

Propiedades

Data

Obtiene una colección de pares clave/valor que proporciona información definida por el usuario adicional sobre la excepción.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Heredado de Exception)
HelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.Gets or sets a link to the help file associated with this exception.

(Heredado de Exception)
HResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Heredado de Exception)
InnerException

Obtiene la instancia Exception que produjo la excepción actual.Gets the Exception instance that caused the current exception.

(Heredado de Exception)
Message

Obtiene un mensaje que describe la excepción actual.Gets a message that describes the current exception.

(Heredado de Exception)
Source

Devuelve o establece el nombre de la aplicación o del objeto que generó el error.Gets or sets the name of the application or the object that causes the error.

(Heredado de Exception)
StackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.Gets a string representation of the immediate frames on the call stack.

(Heredado de Exception)
TargetSite

Obtiene el método que produjo la excepción actual.Gets the method that throws the current exception.

(Heredado de Exception)

Métodos

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Heredado de Object)
GetBaseException()

Cuando se reemplaza en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Heredado de Exception)
GetHashCode()

Sirve como función hash predeterminada.Serves as the default hash function.

(Heredado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Cuando se reemplaza en una clase derivada, establece SerializationInfo con información sobre la excepción.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Heredado de Exception)
GetType()

Obtiene el tipo de tiempo de ejecución de la instancia actual.Gets the runtime type of the current instance.

(Heredado de Exception)
MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
ToString()

Crea y devuelve una representación de cadena de la excepción actual.Creates and returns a string representation of the current exception.

(Heredado de Exception)

Eventos

SerializeObjectState

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Heredado de Exception)

Se aplica a

Consulte también: