Middle+
U koju konstrukciju se pretvara operator lock u C#?
sobes.tech АИ
Одговор од АИ
Operator lock u C# se transformiše u pozive metoda Monitor.Enter i Monitor.Exit (ili Monitor.TryEnter sa naknadnim Monitor.Exit) unutar try...finally bloka.
// Originalni kod sa lock
object lockObject = new object();
lock (lockObject)
{
// Zaštićeni kod
}
// Transformacija će otprilike izgledati ovako:
object lockObject = new object();
bool lockTaken = false; // Zastavica za praćenje da li je monitor stečen
try
{
Monitor.Enter(lockObject, ref lockTaken); // Pokušaj da se stekne monitor
// Umesto `Monitor.Enter` može se koristiti `Monitor.TryEnter`
if (lockTaken) // Proverava se da li je monitor stečen
{
// Zaštićeni kod
}
}
finally
{
if (lockTaken) // Oslobađa se monitor samo ako je stečen
{
Monitor.Exit(lockObject);
}
}
Korišćenje Monitor.Enter sa parametrom ref bool lockTaken i blokom try...finally garantuje da će monitor biti oslobođen čak i u slučaju izuzetka u zaštićenom kodu.