Sobes.tech
Middle+

Kādā konstrukcijā tiek pārveidots lock operators C#?

sobes.tech AI

Atbilde no AI

C# valodā lock operators tiek pārveidots par Monitor.Enter un Monitor.Exit metožu izsaukšanu (vai Monitor.TryEnter ar Monitor.Exit) try...finally blokā.

// Oriģinālais kods ar lock
object lockObject = new object();
lock (lockObject)
{
    // Aizsargāts kods
}

// Pārveidošana aptuveni šādi:
object lockObject = new object();
bool lockTaken = false; // Karogs, kas seko, vai monitors ir iegūts
try
{
    Monitor.Enter(lockObject, ref lockTaken); // Mēģinājums iegūt monitoru
    // `Monitor.TryEnter` var izmantot vietā `Monitor.Enter`
    if (lockTaken) // Pārbauda, vai monitors ir iegūts
    {
        // Aizsargāts kods
    }
}
finally
{
    if (lockTaken) // Atbrīvo monitoru tikai tad, ja tas ir iegūts
    {
        Monitor.Exit(lockObject);
    }
}

Monitor.Enter ar ref bool lockTaken parametru un try...finally bloks nodrošina, ka monitors tiks atbrīvots pat ja notiek izņēmums aizsargātajā kodā.