Middle+
C# dilində lock operatoru hansı quruluşa çevrilir?
sobes.tech Süni İntellekt
AI-dan cavab
C# dilində lock operatoru Monitor.Enter və Monitor.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.Enter və ref 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.