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
lockkulcsszó 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.