Junior — Middle
Les collections en Swift sont-elles thread-safe pour le travail multithread ?
sobes.tech IA
Réponse de l'IA
Les collections en Swift (par exemple, Array, Dictionary, Set) ne sont pas thread-safe par défaut. Cela signifie qu’un accès simultané depuis plusieurs threads sans synchronisation peut entraîner un comportement imprévisible et des erreurs.
Pour travailler en toute sécurité avec des collections dans un environnement multithread, il est nécessaire d’utiliser des mécanismes de synchronisation, par exemple :
- Files DispatchQueue avec barrières (barrier) pour l’écriture
- NSLock ou d’autres objets de verrouillage
- Des wrappers spécialisés thread-safe
Exemple d’utilisation de DispatchQueue pour un accès thread-safe à un tableau :
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
}
}
Ainsi, pour travailler en toute sécurité avec des collections dans du code multithread en Swift, il est nécessaire d’appliquer des moyens supplémentaires de synchronisation.