Middle+
În ce construcție se transformă operatorul lock în C#?
sobes.tech AI
Răspuns de la AI
Operatorul lock în C# se transformă în apeluri ale metodelor Monitor.Enter și Monitor.Exit (sau Monitor.TryEnter urmat de Monitor.Exit) într-un bloc try...finally.
// Codul original cu lock
object lockObject = new object();
lock (lockObject)
{
// Cod protejat
}
// Transformarea va face aproximativ următorul lucru:
object lockObject = new object();
bool lockTaken = false; // Flag pentru urmărirea dacă monitorul a fost preluat
try
{
Monitor.Enter(lockObject, ref lockTaken); // Încercarea de a prelua monitorul
// Se poate folosi `Monitor.TryEnter` în loc de `Monitor.Enter`
if (lockTaken) // Verificăm dacă monitorul a fost preluat
{
// Cod protejat
}
}
finally
{
if (lockTaken) // Eliberăm monitorul doar dacă a fost preluat
{
Monitor.Exit(lockObject);
}
}
Utilizarea lui Monitor.Enter cu parametrul ref bool lockTaken și blocul try...finally garantează că monitorul va fi eliberat chiar și în cazul apariției unei excepții în codul protejat.