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.