LockRecursionException Kelas

Definisi

Pengecualian yang dilemparkan ketika entri rekursif ke dalam kunci tidak kompatibel dengan kebijakan rekursi untuk kunci.

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
Warisan
LockRecursionException
Atribut

Contoh

Contoh berikut menunjukkan dua penyebab LockRecursionException saat menggunakan ReaderWriterLockSlim kelas . Program ini membuat ReaderWriterLockSlim dengan menggunakan konstruktor tanpa parameter, yang melarang rekursi. Program kemudian memulai utas yang memasuki kunci dalam mode baca. Utas mencoba memasukkan kunci secara rekursif dalam mode baca, dan menangkap pengecualian yang dihasilkan. Terakhir, utas mencoba memasuki mode tulis, yang akan menciptakan potensi kebuntuan. Utas menangkap pengecualian yang dihasilkan.

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

Keterangan

LockRecursionException dilemparkan karena beberapa alasan, termasuk yang berikut:

  • Jika utas mencoba memasukkan instans ReaderWriterLockSlim secara rekursif, tetapi instans tidak mendukung rekursi.

  • Jika utas mencoba memasukkan ReaderWriterLockSlim instans dalam mode tulis atau mode yang dapat ditingkatkan saat utas awalnya memasukkan kunci dalam mode baca. Ini mewakili potensi kebuntuan dan oleh karena itu tidak diperbolehkan.

  • Jika mengizinkan satu tingkat rekursi lagi akan melebihi nilai maksimum untuk penghitung penyimpanan internal yang digunakan untuk melacak rekursi. Batas ini sangat besar sehingga aplikasi tidak boleh menemukannya.

Konstruktor

Nama Deskripsi
LockRecursionException()

Menginisialisasi instans LockRecursionException baru kelas dengan pesan yang disediakan sistem yang menjelaskan kesalahan.

LockRecursionException(SerializationInfo, StreamingContext)
Kedaluwarsa.

Menginisialisasi instans LockRecursionException baru kelas dengan data berseri.

LockRecursionException(String, Exception)

Menginisialisasi instans LockRecursionException baru kelas dengan pesan kesalahan tertentu dan referensi ke pengecualian dalam yang merupakan penyebab pengecualian ini.

LockRecursionException(String)

Menginisialisasi instans LockRecursionException baru kelas dengan pesan tertentu yang menjelaskan kesalahan.

Properti

Nama Deskripsi
Data

Mendapatkan kumpulan pasangan kunci/nilai yang memberikan informasi tambahan yang ditentukan pengguna tentang pengecualian.

(Diperoleh dari Exception)
HelpLink

Mendapatkan atau mengatur tautan ke file bantuan yang terkait dengan pengecualian ini.

(Diperoleh dari Exception)
HResult

Mendapatkan atau mengatur HRESULT, nilai numerik berkode yang ditetapkan ke pengecualian tertentu.

(Diperoleh dari Exception)
InnerException

Mendapatkan instans Exception yang menyebabkan pengecualian saat ini.

(Diperoleh dari Exception)
Message

Mendapatkan pesan yang menjelaskan pengecualian saat ini.

(Diperoleh dari Exception)
Source

Mendapatkan atau mengatur nama aplikasi atau objek yang menyebabkan kesalahan.

(Diperoleh dari Exception)
StackTrace

Mendapatkan representasi string dari bingkai langsung pada tumpukan panggilan.

(Diperoleh dari Exception)
TargetSite

Mendapatkan metode yang melemparkan pengecualian saat ini.

(Diperoleh dari Exception)

Metode

Nama Deskripsi
Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetBaseException()

Ketika ditimpa di kelas turunan, mengembalikan Exception yang merupakan akar penyebab dari satu atau beberapa pengecualian berikutnya.

(Diperoleh dari Exception)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetObjectData(SerializationInfo, StreamingContext)
Kedaluwarsa.

Saat ditimpa di kelas turunan, mengatur SerializationInfo dengan informasi tentang pengecualian.

(Diperoleh dari Exception)
GetType()

Mendapatkan jenis runtime instans saat ini.

(Diperoleh dari Exception)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
ToString()

Membuat dan mengembalikan representasi string dari pengecualian saat ini.

(Diperoleh dari Exception)

Acara

Nama Deskripsi
SerializeObjectState
Kedaluwarsa.

Terjadi ketika pengecualian diserialisasikan untuk membuat objek status pengecualian yang berisi data berseri tentang pengecualian.

(Diperoleh dari Exception)

Berlaku untuk

Lihat juga