Sobes.tech
Junior — Middle

Hogyan kezelik a rendszerek azt a helyzetet, amikor több szál egyidejűleg hozzáfér egy közös változóhoz vagy állapothoz?

sobes.tech MI

Válasz az MI-től

Amikor több szál egyidejűleg hozzáfér egy közös változóhoz vagy állapothoz, versenyhelyzet (race condition) lép fel. A helytelen adatok elkerülése és a helyesség biztosítása érdekében szinkronizációs mechanizmusokat alkalmaznak:

  • Zárak (lock, mutex) — lehetővé teszik egy szálnak, hogy kizárólagosan birtokolja az erőforrást, a többi vár.
  • Monitorok (Monitor.Enter/Exit C#-ben) — rugalmasabb zárolási mechanizmus.
  • A lock kulcsszó C#-ban — egyszerűsített szintaxis a monitorokhoz.
  • Atomi műveletek (Interlocked) — egyszerű műveletekhez, teljes zárolás nélkül.
  • Párhuzamos gyűjtemények — szálbiztos adatstruktúrák.

Példa a lock használatára C#-ban:

private readonly object _sync = new object();
private int _counter = 0;

public void Increment()
{
    lock(_sync)
    {
        _counter++;
    }
}

Ez a megközelítés garantálja, hogy csak egy szál módosítja a változót egy adott időben.