Middle+
რა მშენებლობაში გარდაიქმნება lock ოპერატორი C#-ში?
sobes.tech AI
პასუხი AI-სგან
C# dilində lock operatoru Monitor.Enter və Monitor.Exit metodlarının çağırışlarına (və ya Monitor.TryEnter ilə Monitor.Exit ardıcıl olaraq) try...finally blokunda çevrilir.
// Əsas 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.