Sobes.tech
Junior

Koks yra rakto žodžio lock tikslas C#?

sobes.tech AI

Atsakymas iš AI

Raktas lock naudojamas užtikrinti sriegių saugumą sukuriant kritinę sekciją.

Pagrindiniai tikslai:

  • Prieigos blokavimas: Užtikrina, kad tik vienas srautas gali vykdyti kodą lock bloke vienu metu.
  • Bendrų išteklių apsauga: Užkerta kelią lenktynių sąlygoms, kai keli srautai vienu metu pasiekia bendrus duomenis ar išteklius, tokius kaip klasės laukai, kolekcijos ir kt.
  • Sriegių sinchronizavimas: Naudojamas operacijų vykdymo tvarkos organizavimui daugiasriegiuose scenarijuose.

Naudojimo pavyzdys:

private static readonly object _lockObject = new object(); // Užrakto objektas

public void UpdateCounter()
{
    // Kritinės sekcijos pradžia
    lock (_lockObject)
    {
        // Kodo dalis, vykdoma tik vieno srauto vienu metu
        counter++;
    }
    // Kritinės sekcijos pabaiga
}

Svarbu naudoti specialų objektą (_lockObject pavyzdyje) užrakinimui, o ne this ar typeof(TypeName), siekiant išvengti galimų mirties taškų. Rekomenduojama naudoti object tipo objektus arba System.Threading.ReaderWriterLockSlim sudėtingesniems scenarijams.