Sobes.tech
Middle+

C# da lock operatori qaysi tuzilishga aylantiriladi?

sobes.tech AI

AIdan javob

C# tilida lock operatori Monitor.Enter va Monitor.Exit metodlariga (yoki Monitor.TryEnter bilan keyinchalik Monitor.Exit) try...finally blokida aylantiriladi.

// Asosiy kod bilan lock
object lockObject = new object();
lock (lockObject)
{
    // Himoyalangan kod
}

// Transformatsiya taxminan quyidagicha bo'ladi:
object lockObject = new object();
bool lockTaken = false; // Monitorning o'zlashtirilganligini kuzatish uchun flag
try
{
    Monitor.Enter(lockObject, ref lockTaken); // Monitorni olishga urinish
    // `Monitor.TryEnter` o'rniga `Monitor.Enter` ishlatilishi mumkin
    if (lockTaken) // Monitor o'zlashtirilganligini tekshirish
    {
        // Himoyalangan kod
    }
}
finally
{
    if (lockTaken) // Faqat monitor o'zlashtirilgan bo'lsa uni bo'shatish
    {
        Monitor.Exit(lockObject);
    }
}

Monitor.Enter va ref bool lockTaken parametri bilan try...finally bloki ishlatilishi, himoyalangan kodda xatolik yuz bersa ham, monitorning bo'shatilishini kafolatlaydi.