Junior — Middle
Comment créer un tableau protégé contre les modifications simultanées par plusieurs threads?
sobes.tech IA
Réponse de l'IA
Pour créer un tableau protégé contre les modifications simultanées par plusieurs threads dans iOS (Swift), on utilise généralement la synchronisation de l'accès au tableau. Une méthode simple consiste à envelopper le tableau dans une classe et à utiliser DispatchQueue avec des tâches barrières pour l'écriture et des tâches normales pour la lecture.
Exemple :
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
}
}
Cette approche permet de lire les données du tableau en toute sécurité en parallèle, tandis que les écritures sont effectuées de manière séquentielle, évitant ainsi les conditions de course. Alternativement, on peut utiliser NSLock ou d'autres mécanismes de synchronisation, mais DispatchQueue avec des barrières est une méthode plus moderne et pratique.