Sobes.tech
Junior — Middle

Puoi spiegare il concetto di race condition in un ambiente multithread e come può influenzare il funzionamento di un programma?

sobes.tech AI

Risposta dell'AI

Le condizione di race (race condition) si verifica quando più thread accedono e modificano dati condivisi contemporaneamente senza una sincronizzazione adeguata. Di conseguenza, lo stato finale dei dati può essere imprevedibile e dipendere dall'ordine di esecuzione dei thread.

Ad esempio, se due thread incrementano contemporaneamente un contatore, senza blocchi, il valore finale può essere inferiore a quello atteso, poiché le operazioni di lettura e scrittura possono sovrapporsi.

Su iOS, le condizioni di race possono causare crash, visualizzazioni errate dell'UI o corruzione dei dati. Per evitarle, si utilizzano meccanismi di sincronizzazione:

  • Code GCD con attributo seriale
  • NSLock, @synchronized
  • Proprietà atomiche

Esempio con GCD:

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

serialQueue.sync {
    counter += 1
}

Questo garantisce che le modifiche a counter avvengano in modo sequenziale.