Sobes.tech
Middle+

რა მშენებლობაში გარდაიქმნება lock ოპერატორი C#-ში?

sobes.tech AI

პასუხი AI-სგან

C# dilində lock operatoru Monitor.EnterMonitor.Exit metodlarının çağırışlarına (və ya Monitor.TryEnter ilə Monitor.Exit ardıcıl olaraq) try...finally blokunda çevrilir.

// Əsas kod ilə lock
object lockObject = new object();
lock (lockObject)
{
    // Qorunan kod
}

// Transformasiya aşağıdakı kimi olacaq:
object lockObject = new object();
bool lockTaken = false; // Monitorun alınmasını izləmək üçün bayraq
try
{
    Monitor.Enter(lockObject, ref lockTaken); // Monitoru almağa cəhd
    // `Monitor.TryEnter` yerinə `Monitor.Enter` istifadə oluna bilər
    if (lockTaken) // Monitorun alınıb-alınmadığını yoxlayırıq
    {
        // Qorunan kod
    }
}
finally
{
    if (lockTaken) // Monitor yalnız alınmışsa azad edilir
    {
        Monitor.Exit(lockObject);
    }
}

Monitor.Enterref bool lockTaken parametri ilə try...finally bloku istifadə edilərək, qorunan kodda istisna baş verərsə belə, monitorun azad edilməsi təmin edilir.