Sobes.tech
Junior — Middle

A estrutura de dados array garante segurança ao aceder simultaneamente a partir de múltiplas threads?

sobes.tech IA

Resposta da IA

Os arrays em iOS (por exemplo, NSArray ou Array em Swift) por padrão não são seguros para threads. Isso significa que, ao aceder simultaneamente de múltiplas threads sem sincronização adicional, pode ocorrer uma condição de corrida, levando a comportamentos imprevisíveis ou à falha da aplicação.

Para garantir a segurança no acesso multi-thread, deve-se usar mecanismos de sincronização, como DispatchQueue com barreiras, NSLock, ou outras primitivas de sincronização. Em Swift, também é possível usar DispatchQueue com o atributo .concurrent e métodos sync ou async(flags: .barrier) para leituras e escritas seguras.

Exemplo de uso de DispatchQueue para acesso seguro a um 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 index < self.array.count {
                result = self.array[index]
            }
        }
        return result
    }
}

Dessa forma, os arrays por si só não garantem segurança ao acesso simultâneo de múltiplas threads.