Sobes.tech
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:

  1. lock võtab argumendina objekti, mida kasutatakse mittedsena (monitori) jaoks.
  2. Enne lock ploki koodi täitmist püüab voog saada määratud objekti monopoliparooli.
  3. Kui lukk on vaba, saab voog selle ja täidab koodi.
  4. Kui lukk on hõivatud teise vooga, blokeeritakse praegune voog (liigub ooterežiimi), kuni lukk vabastatakse.
  5. lock plokist 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, this või typeof(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.
  • lock on süntaktiline suhkur Monitor klassi meetodite kasutamiseks.