Sobes.tech
Junior — Middle

Como criar um array protegido contra alterações simultâneas de vários threads?

sobes.tech IA

Resposta da IA

Para criar um array protegido contra alterações simultâneas de múltiplos threads no iOS (Swift), normalmente usa-se a sincronização do acesso ao array. Uma forma simples é envolver o array numa classe e usar DispatchQueue com tarefas de barreira para escrita e tarefas normais para leitura.

Exemplo:

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

Esta abordagem permite ler dados do array de forma segura em paralelo, enquanto as gravações são feitas sequencialmente, prevenindo condições de corrida. Alternativamente, pode-se usar NSLock ou outros mecanismos de sincronização, mas DispatchQueue com barreiras é uma forma mais moderna e conveniente.