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.