Junior
Mis on võtmesõna lock funktsioon C# keeles?
sobes.tech AI
Vastus AI-lt
Võtmesõna lock kasutatakse mitmetoalistes rakendustes ressursside sünkroniseerimiseks. See tagab, et ainult üks voog saab teostada lock ploki koodi konkreetsel ajal:
Tööpõhimõte:
lockvõtab argumendina objekti, mida kasutatakse mittedsena (monitori) jaoks.- Enne
lockploki koodi täitmist püüab voog saada määratud objekti monopoliparooli. - Kui lukk on vaba, saab voog selle ja täidab koodi.
- Kui lukk on hõivatud teise vooga, blokeeritakse praegune voog (liigub ooterežiimi), kuni lukk vabastatakse.
lockplokist väljumisel (isegi erandjuhtumi korral) vabastatakse lukk automaatselt.
Kasutatakse ühiste ressursside kaitsmiseks, näiteks klassi väljad, kogud või teised objektid, millele võivad pöörduda mitu voogu samaaegselt, et vältida võistlusolukordi (race conditions) ja tagada andmete terviklikkus:
Näide kasutamisest:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Sünkroniseerimise objekt
public void Increment()
{
lock (_lockObject) // Samaaegne juurdepääs koodiplokile
{
_counter++; // Turvaline ühise ressursi muutmine
}
}
public int GetCounter()
{
lock (_lockObject) // Samuti lugemisel samaaegne juurdepääs
{
return _counter;
}
}
}
Olulised punktid:
- Lukustusobjekt peab olema viidetüüpi ja tavaliselt privaatne väli (
readonly), et vältida väljastpoolt sekkumist. - Vältige
string,thisvõitypeof(TypeName)tüüpide kasutamist, kuna need võivad olla jagatud või väljastpoolt kättesaadavad, mis võib põhjustada vastastikuseid lukke (deadlocks) või ebaõiget tööd. lockon süntaktiline suhkurMonitorklassi meetodite kasutamiseks.