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.