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.