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ą
lockbloke 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.