Middle+
Kādā konstrukcijā tiek pārveidots lock operators C#?
sobes.tech AI
Atbilde no AI
C# valodā lock operators tiek pārveidots par Monitor.Enter un Monitor.Exit metožu izsaukšanu (vai Monitor.TryEnter ar Monitor.Exit) try...finally blokā.
// Oriģinālais kods ar lock
object lockObject = new object();
lock (lockObject)
{
// Aizsargāts kods
}
// Pārveidošana aptuveni šādi:
object lockObject = new object();
bool lockTaken = false; // Karogs, kas seko, vai monitors ir iegūts
try
{
Monitor.Enter(lockObject, ref lockTaken); // Mēģinājums iegūt monitoru
// `Monitor.TryEnter` var izmantot vietā `Monitor.Enter`
if (lockTaken) // Pārbauda, vai monitors ir iegūts
{
// Aizsargāts kods
}
}
finally
{
if (lockTaken) // Atbrīvo monitoru tikai tad, ja tas ir iegūts
{
Monitor.Exit(lockObject);
}
}
Monitor.Enter ar ref bool lockTaken parametru un try...finally bloks nodrošina, ka monitors tiks atbrīvots pat ja notiek izņēmums aizsargātajā kodā.