Junior
Ի՞նչ է lock բանալի բառի նպատակը C#-ում:
sobes.tech AI
Պատասխան AI-ից
Կոդային բանալի lock-ը օգտագործվում է հոսքերի անվտանգությունը ապահովելու համար՝ ստեղծելով քննադատական հատված։
Նրա հիմնական նպատակները՝
- Մուտքի արգելափակում: Գերաշխավորում է, որ միայն մեկ հոսք կարող է կատարել
lockբլոկի ներսում գտնվող կոդը տվյալ պահին։ - Ընդհանուր ռեսուրսների պաշտպանություն: Արգելում է մրցակցության պայմաններ՝ երբ միաժամանակ մի քանի հոսքեր մուտք են գործում ընդհանուր տվյալներ կամ ռեսուրսներ, ինչպիսիք են դասի դաշտերը, հավաքածուները և այլն։
- Հոսքերի սինխրոնիզացիա: Օգտագործվում է բազմահոսքային սցենարներում գործողությունների կատարման կարգը կազմակերպելու համար։
Օգտագործման օրինակ՝
private static readonly object _lockObject = new object(); // Լոկի օբյեկտ
public void UpdateCounter()
{
// Քննադատական հատվածի սկիզբ
lock (_lockObject)
{
// Այս բլոկի ներսում գտնվող կոդը կարող է կատարվել միայն մեկ հոսքի կողմից մեկ ժամանակում
counter++;
}
// Քննադատական հատվածի ավարտ
}
Կարևոր է օգտագործել մասնագիտացված օբյեկտ (_lockObject օրինակով) լոկավորման համար, ոչ թե this կամ typeof(TypeName), որպեսզի խուսափել հնարավոր մուտքային deadlock-ներից։ Խորհուրդ է տրվում օգտագործել object կամ System.Threading.ReaderWriterLockSlim տիպի օբյեկտներ ավելի բարդ սցենարների համար։