Sobes.tech
Middle+

In welke constructie wordt de lock-operator in C# getransformeerd?

sobes.tech AI

Antwoord van AI

De lock-operator in C# wordt omgezet in aanroepen van de methoden Monitor.Enter en Monitor.Exit (of Monitor.TryEnter met een daaropvolgende Monitor.Exit) binnen een try...finally-blok.

// Oorspronkelijke code met lock
object lockObject = new object();
lock (lockObject)
{
    // Beschermde code
}

// De transformatie zal ongeveer het volgende doen:
object lockObject = new object();
bool lockTaken = false; // Vlag om bij te houden of de monitor is verworven
try
{
    Monitor.Enter(lockObject, ref lockTaken); // Poging om de monitor te verwerven
    // `Monitor.TryEnter` kan in plaats van `Monitor.Enter` worden gebruikt
    if (lockTaken) // Controleren of de monitor is verworven
    {
        // Beschermde code
    }
}
finally
{
    if (lockTaken) // Alleen de monitor vrijgeven als deze is verworven
    {
        Monitor.Exit(lockObject);
    }
}

Het gebruik van Monitor.Enter met de parameter ref bool lockTaken en een try...finally-blok garandeert dat de monitor wordt vrijgegeven, zelfs in het geval van een uitzondering in de beschermde code.