Junior — Middle
As coleções em Swift são seguras para threads?
sobes.tech IA
Resposta da IA
As coleções em Swift (por exemplo, Array, Dictionary, Set) não são seguras para threads por padrão. Isso significa que o acesso simultâneo de vários threads sem sincronização pode levar a comportamentos imprevisíveis e erros.
Para trabalhar com segurança com coleções em um ambiente multithread, é necessário usar mecanismos de sincronização, por exemplo:
- Filas DispatchQueue com barreiras (barrier) para escrita
- NSLock ou outros objetos de bloqueio
- Wrappers especializados seguros para threads
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 array.indices.contains(index) {
result = array[index]
}
}
return result
}
}
Portanto, para trabalhar com segurança com coleções em código multithread em Swift, é necessário aplicar mecanismos adicionais de sincronização.