Sobes.tech
Middle+

C# dilində lock operatoru hansı quruluşa çevrilir?

sobes.tech Süni İntellekt

AI-dan cavab

C# dilində lock operatoru Monitor.EnterMonitor.Exit metodlarına (və ya Monitor.TryEnter ilə birlikdə Monitor.Exit) try...finally blokunda çevrilir.

// Orijinal 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.