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.