Middle+
Do akej konštrukcie sa transformuje operátor lock v C#?
sobes.tech AI
Odpoveď od AI
Operátor lock v C# sa transformuje na volania metód Monitor.Enter a Monitor.Exit (alebo Monitor.TryEnter s následným Monitor.Exit) v bloku try...finally.
// Pôvodný kód s lock
object lockObject = new object();
lock (lockObject)
{
// Chránený kód
}
// Transformácia bude približne nasledovná:
object lockObject = new object();
bool lockTaken = false; // Vlajka na sledovanie, či bol monitor získaný
try
{
Monitor.Enter(lockObject, ref lockTaken); // Pokus o získanie monitora
// Namiesto `Monitor.Enter` možno použiť `Monitor.TryEnter`
if (lockTaken) // Kontrola, či bol monitor získaný
{
// Chránený kód
}
}
finally
{
if (lockTaken) // Uvoľní monitor iba ak bol získaný
{
Monitor.Exit(lockObject);
}
}
Použitie Monitor.Enter s parametrom ref bool lockTaken a blokom try...finally zabezpečuje, že monitor bude uvoľnený aj v prípade výnimky v chránenom kóde.