Middle+
Ի՞նչ կառուցվածքի մեջ է փոխարկվում lock օպերատորը C#-ում։
sobes.tech AI
Պատասխան AI-ից
C#-ի lock օպերատորը փոխարկվում է Monitor.Enter և Monitor.Exit մեթոդների կանչերին (կամ Monitor.TryEnter-ին Monitor.Exit-ի հետ միասին) try...finally բլոկում:
// Միգուցե սկզբնական կոդը lock-ով
object lockObject = new object();
lock (lockObject)
{
// Ապահովված կոդ
}
// Փոխարկումը մոտավորապես հետևյալն է.
object lockObject = new object();
bool lockTaken = false; // դրոշ՝ հետևելու համար, արդյոք մոնիտորը ձեռք է բերվել
try
{
Monitor.Enter(lockObject, ref lockTaken); // Փորձել մոնիտորը ձեռք բերել
// Կարող եք օգտագործել `Monitor.TryEnter`-ը `Monitor.Enter`-ի փոխարեն
if (lockTaken) // Ստուգում է, արդյոք մոնիտորը ձեռք է բերվել
{
// Ապահովված կոդ
}
}
finally
{
if (lockTaken) // Մոնիտորը ազատվում է միայն եթե այն ձեռք է բերվել
{
Monitor.Exit(lockObject);
}
}
Monitor.Enter-ի օգտագործումը ref bool lockTaken պարամետրի հետ և try...finally բլոկը ապահովում է, որ մոնիտորը ազատվի նույնիսկ եթե տեղի ունենա արտահայտություն պաշտպանվող կոդում։