Sobes.tech
Junior — Middle

Можете ли објаснити концепт трка услова у окружењу са више нитова и како он може утицати на рад програма?

sobes.tech АИ

Одговор од АИ

Uslov trke (race condition) javlja se kada više niti istovremeno pristupa i menja zajedničke podatke bez odgovarajuće sinhronizacije. Kao rezultat, konačno stanje podataka može biti nepredvidivo i zavisi od reda izvršavanja niti.

Na primer, ako dve niti istovremeno povećavaju brojač, bez zaključavanja, konačna vrednost može biti manja od očekivane, jer operacije čitanja i pisanja mogu da se preklapaju.

Na iOS-u, uslovi trke mogu dovesti do padova, netačnog prikaza UI ili oštećenja podataka. Da bi se to izbeglo, koriste se mehanizmi za sinhronizaciju:

  • GCD redovi sa atributom serial
  • NSLock, @synchronized
  • Atomske osobine

Primer sa GCD:

let serialQueue = DispatchQueue(label: "com.example.serial")
var counter = 0

serialQueue.sync {
    counter += 1
}

Ovo osigurava da se promene u counter dešavaju sekvencijalno.