Sobes.tech
Junior — Middle

¿Son seguras para hilos las colecciones en Swift?

sobes.tech AI

Respuesta de la IA

Las colecciones en Swift (por ejemplo, Array, Dictionary, Set) no son seguras para hilos por defecto. Esto significa que el acceso simultáneo desde varios hilos sin sincronización puede llevar a comportamientos impredecibles y errores.

Para trabajar de manera segura con colecciones en un entorno multihilo, es necesario utilizar mecanismos de sincronización, por ejemplo:

  • Colas DispatchQueue con barreras (barrier) para escritura
  • NSLock u otros objetos de bloqueo
  • Envoltorios especializados seguros para hilos

Ejemplo de uso de DispatchQueue para acceso seguro a un array:

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

Por lo tanto, para trabajar de manera segura con colecciones en código multihilo en Swift, es necesario aplicar mecanismos adicionales de sincronización.