Junior — Middle
Come si crea un array protetto da modifiche simultanee da più thread?
sobes.tech AI
Risposta dell'AI
Per creare un array protetto da modifiche simultanee da più thread in iOS (Swift), si utilizza generalmente la sincronizzazione dell'accesso all'array. Un modo semplice è avvolgere l'array in una classe e usare DispatchQueue con compiti barriera per la scrittura e compiti normali per la lettura.
Esempio:
class ThreadSafeArray<T> {
private var array: [T] = []
private let queue = DispatchQueue(label: "com.example.threadSafeArray", attributes: .concurrent)
func append(_ element: T) {
queue.async(flags: .barrier) {
self.array.append(element)
}
}
func get(at index: Int) -> T? {
var result: T?
queue.sync {
if array.indices.contains(index) {
result = array[index]
}
}
return result
}
var count: Int {
var result = 0
queue.sync {
result = array.count
}
return result
}
}
Questo approccio permette di leggere i dati dell'array in modo sicuro in parallelo, mentre le scritture vengono eseguite in modo sequenziale, prevenendo condizioni di gara. In alternativa, si può usare NSLock o altri meccanismi di sincronizzazione, ma DispatchQueue con barriere è un metodo più moderno e comodo.