Junior
Ի՞նչ է lock բառի գործառույթը C# լեզվում։
sobes.tech AI
Պատասխան AI-ից
Բանալի բառը lock օգտագործվում է բազմատողային ծրագրերում ռեսուրսների մուտքի սինխրոնիզացման համար: Այն երաշխավորում է, որ միայն մեկ թև կարող է կատարել lock բլոկի կոդը տվյալ պահին:
Աշխատանքի սկզբունքը:
lockընդունում է որպես արգումենտ օբյեկտ, որը օգտագործվում է մյուտեքս (մոնիտոր) ի համար:- Նախքան
lockբլոկի կոդը գործարկել, թևը փորձում է ստանալ նշված օբյեկտի մոնոպոլային արգելափակումը: - Եթե արգելափակումը ազատ է, թևը ստանում է այն և executes կոդը:
- Եթե արգելափակումը զբաղված է այլ թևի կողմից, ընթացիկ թևը բլոկվում է (անցնում է սպասման վիճակի), մինչև արգելափակումը ազատվի:
lockբլոկից դուրս գալուց հետո (նույնիսկ բացառության դեպքում), արգելափակումը ավտոմատ կերպով ազատվում է:
Կիրառվում է ընդհանուր ռեսուրսների պաշտպանությանը, ինչպիսիք են դասի դաշտերը, հավաքածուները կամ այլ օբյեկտներ, որոնց կարող են միաժամանակ դիմել մի քանի թևեր, որպեսզի խուսափեն մրցակցության պայմաններից (race conditions) և ապահովեն տվյալների ամբողջականությունը:
Օրինակ օգտագործման:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Սինխրոնիզացման օբյեկտ
public void Increment()
{
lock (_lockObject) // Միաժամանակյա մուտք դեպի կոդի բլոկ
{
_counter++; // Անվտանգ փոփոխություն ընդհանուր ռեսուրսի
}
}
public int GetCounter()
{
lock (_lockObject) // Միաժամանակյա մուտք նաև ընթերցման ժամանակ
{
return _counter;
}
}
}
Մեծ կարևորություն:
- Մուտքագրման օբյեկտը պետք է լինի ռեֆերանսային տիպի և սովորաբար՝ մասնավոր դաշտ (
readonly)՝ արտաքին միջամտությունը կանխելու համար: - Խուսափեք
string,this, կամtypeof(TypeName)տիպերի օգտագործումից, քանի որ դրանք կարող են համատեղ օգտագործվել կամ հասանելի լինել արտաքինից, ինչը կարող է հանգեցնել միմյանց բլոկավորումների կամ սխալ աշխատանքի: lock-ը սինտաքսիկ շաքար էMonitorդասի մեթոդների օգտագործման համար։