Sobes.tech
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.