Sobes.tech
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 տիպի օբյեկտներ ավելի բարդ սցենարների համար։