Junior — Middle
Poți explica conceptul de cursă a condițiilor într-un mediu multithread și cum poate acesta afecta funcționarea unui program?
sobes.tech AI
Răspuns de la AI
Condția de cursă (race condition) apare atunci când mai multe fire de execuție accesează și modifică simultan datele comune fără o sincronizare adecvată. Ca rezultat, starea finală a datelor poate fi imprevizibilă și depinde de ordinea în care se execută firele.
De exemplu, dacă două fire de execuție cresc în același timp un contor, fără blocări, valoarea finală poate fi mai mică decât cea așteptată, deoarece operațiile de citire și scriere se pot suprapune.
Pe iOS, condițiile de cursă pot duce la blocări, afișări incorecte ale UI sau corupție a datelor. Pentru a evita acest lucru, se folosesc mecanisme de sincronizare:
- Cozi GCD cu atribut serial
- NSLock, @synchronized
- Proprietăți atomice
Exemplu cu GCD:
let serialQueue = DispatchQueue(label: "com.example.serial")
var counter = 0
serialQueue.sync {
counter += 1
}
Asigură că modificările la counter se fac în mod secvențial.