Sobes.tech
Middle

Mi az a lock-erek C#-ban?

sobes.tech MI

Válasz az MI-től

A lock C#-ban kizárólagos hozzáférést biztosít egy kódrészlethez. Garantálja, hogy csak egy szál hajthatja végre ezt a blokkot egyszerre, elkerülve a versenyhelyzeteket (race conditions) megosztott erőforrások használata során.

private static readonly object _lockObject = new object(); // Szinkronizációs objektum

public void AccessSharedResource()
{
    lock (_lockObject) // Objektum zárolása
    {
        // Kritikus szakasz: kód, amely kizárólagos hozzáférést igényel
        // Munka megosztott erőforrással (pl. változó módosítása)
    } // A zárolás automatikusan feloldódik a blokk elhagyásakor
}

Alternatívák és kapcsolódó fogalmak:

  • Monitor: Finomabb kontrollt nyújt a szinkronizáció felett, beleértve a Wait, Pulse, PulseAll metódusokat.
  • Mutex: folyamatok közötti és ugyanazon folyamaton belüli szinkronizációra használják.
  • Semaphore/SemaphoreSlim: Korlátozza, hogy hány szál férhet hozzá egy erőforráshoz egyidejűleg.
  • ReaderWriterLockSlim: Több szál olvashat egyszerre, de csak egy írhat.

A zárolási mechanizmus kiválasztása a konkrét szinkronizációs feladattól függ. A lock a Monitor.Enter és Monitor.Exit rövidített formája, és alkalmas a legtöbb egyszerű szinkronizálási esetben egy folyamaton belül.