Junior — Middle
Kaip sistemos tvarko situaciją, kai keli srautai vienu metu kreipiasi į bendrą kintamąjį ar būseną?
sobes.tech AI
Atsakymas iš AI
Kai kelių srautų vienu metu kreipiasi į bendrą kintamąjį ar būseną, kyla lenktynių sąlyga (race condition). Norint išvengti neteisingų duomenų ir užtikrinti teisingumą, naudojami sinchronizacijos mechanizmai:
- Užraktai (lock, mutex) — leidžia vienam srautui turėti išskirtinę prieigą prie ištekliaus, kiti laukia.
- Monitoriai (Monitor.Enter/Exit C#) — lankstesnis užraktų mechanizmas.
- Raktinis žodis
lockC# — supaprastinta monitorių sintaksė. - Atominės operacijos (Interlocked) — paprastesnėms operacijoms be pilno užrakto.
- Lygiagretūs rinkiniai — srautui saugios duomenų struktūros.
Pavyzdys naudojant lock C#:
private readonly object _sync = new object();
private int _counter = 0;
public void Increment()
{
lock(_sync)
{
_counter++;
}
}
Šis požiūris garantuoja, kad tik vienas srautas keičia kintamąjį vienu metu.