Sobes.tech
Middle+

C# dilinde lock operatörü hangi yapıya dönüştürülür?

sobes.tech yapay zeka

AI'dan gelen yanıt

C# dilinde lock operatörü, Monitor.Enter ve Monitor.Exit metodlarına (veya Monitor.TryEnter ile ardından Monitor.Exit) try...finally bloğu içinde dönüştürülür.

// Orijinal kod ile lock
object lockObject = new object();
lock (lockObject)
{
    // Korunan kod
}

// Dönüşüm yaklaşık olarak şu şekilde olur:
object lockObject = new object();
bool lockTaken = false; // Monitörün alınma durumu için bayrak
try
{
    Monitor.Enter(lockObject, ref lockTaken); // Monitör alma girişimi
    // `Monitor.TryEnter` yerine `Monitor.Enter` kullanılabilir
    if (lockTaken) // Monitörün alınıp alınmadığını kontrol et
    {
        // Korunan kod
    }
}
finally
{
    if (lockTaken) // Monitör yalnızca alındıysa serbest bırakılır
    {
        Monitor.Exit(lockObject);
    }
}

Monitor.Enter kullanımı ve ref bool lockTaken parametresi ile try...finally bloğu, korunan kodda istisna oluşsa bile monitörün serbest bırakılmasını garanti eder.