Sobes.tech
Junior — Middle

¿Cómo se puede crear un array protegido contra cambios simultáneos desde múltiples hilos?

sobes.tech AI

Respuesta de la IA

Para crear un array protegido contra cambios simultáneos desde múltiples hilos en iOS (Swift), generalmente se utiliza la sincronización del acceso al array. Una forma sencilla es envolver el array en una clase y usar DispatchQueue con tareas barrera para escribir y tareas normales para leer.

Ejemplo:

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
    }
}

Este enfoque permite leer datos del array de manera segura en paralelo, mientras que las escrituras se realizan de forma secuencial, previniendo condiciones de carrera. Alternativamente, se puede usar NSLock u otros mecanismos de sincronización, pero DispatchQueue con barreras es una forma más moderna y conveniente.