LockRecursionException Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Excepción que se produce cuando la entrada recursiva en un bloqueo no es compatible con la directiva de recursión para el bloqueo.
public ref class LockRecursionException : Exception
public class LockRecursionException : Exception
[System.Serializable]
public class LockRecursionException : Exception
type LockRecursionException = class
inherit Exception
[<System.Serializable>]
type LockRecursionException = class
inherit Exception
Public Class LockRecursionException
Inherits Exception
- Herencia
- Atributos
Ejemplos
En el ejemplo siguiente se muestran dos causas de LockRecursionException cuando se usa la ReaderWriterLockSlim clase . El programa crea un ReaderWriterLockSlim mediante el constructor sin parámetros, que no permite la recursividad. A continuación, el programa inicia un subproceso que entra en el bloqueo en modo de lectura. El subproceso intenta introducir el bloqueo de forma recursiva en modo de lectura y detecta la excepción resultante. Por último, el subproceso intenta entrar en modo de escritura, lo que crearía un potencial para interbloqueos. El subproceso detecta la excepción resultante.
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 varias razones, incluido lo siguiente:
Si un subproceso intenta escribir una instancia de ReaderWriterLockSlim recursivamente, pero la instancia no admite la recursividad.
Si un subproceso intenta entrar en una ReaderWriterLockSlim instancia en modo de escritura o modo actualizable cuando el subproceso entró inicialmente en el bloqueo en modo de lectura. Esto representa un posible interbloqueo y, por lo tanto, no se permite.
Si permitir un nivel más de recursividad superaría el valor máximo del contador de almacenamiento interno usado para realizar un seguimiento de las recursiones. Este límite es tan grande que las aplicaciones nunca deben encontrarse con él.
Constructores
| Nombre | Description |
|---|---|
| LockRecursionException() |
Inicializa una nueva instancia de la LockRecursionException clase con un mensaje proporcionado por el sistema que describe el error. |
| LockRecursionException(SerializationInfo, StreamingContext) |
Inicializa una nueva instancia de la LockRecursionException clase con datos serializados. |
| LockRecursionException(String, Exception) |
Inicializa una nueva instancia de la LockRecursionException clase con un mensaje de error especificado y una referencia a la excepción interna que es la causa de esta excepción. |
| LockRecursionException(String) |
Inicializa una nueva instancia de la LockRecursionException clase con un mensaje especificado que describe el error. |
Propiedades
| Nombre | Description |
|---|---|
| Data |
Obtiene una colección de pares clave-valor que proporcionan información adicional definida por el usuario sobre la excepción. (Heredado de Exception) |
| HelpLink |
Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción. (Heredado de Exception) |
| HResult |
Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica. (Heredado de Exception) |
| InnerException |
Obtiene la Exception instancia que provocó la excepción actual. (Heredado de Exception) |
| Message |
Obtiene un mensaje que describe la excepción actual. (Heredado de Exception) |
| Source |
Obtiene o establece el nombre de la aplicación o el objeto que provoca el error. (Heredado de Exception) |
| StackTrace |
Obtiene una representación de cadena de los fotogramas inmediatos en la pila de llamadas. (Heredado de Exception) |
| TargetSite |
Obtiene el método que produce la excepción actual. (Heredado de Exception) |
Métodos
| Nombre | Description |
|---|---|
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| GetBaseException() |
Cuando se reemplaza en una clase derivada, devuelve la Exception causa principal de una o varias excepciones posteriores. (Heredado de Exception) |
| GetHashCode() |
Actúa como la función hash predeterminada. (Heredado de Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Cuando se reemplaza en una clase derivada, establece con SerializationInfo información sobre la excepción. (Heredado de Exception) |
| GetType() |
Obtiene el tipo de tiempo de ejecución de la instancia actual. (Heredado de Exception) |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| ToString() |
Crea y devuelve una representación de cadena de la excepción actual. (Heredado de Exception) |
Eventos
| Nombre | Description |
|---|---|
| SerializeObjectState |
Se produce cuando se serializa una excepción para crear un objeto de estado de excepción que contiene datos serializados sobre la excepción. (Heredado de Exception) |