Junior — Middle
Birden fazla iş parçacığından gelen eşzamanlı değişikliklere karşı korunan bir dizi nasıl oluşturulur?
sobes.tech yapay zeka
AI'dan gelen yanıt
iOS (Swift) üzerinde çoklu iş parçacıklarından eşzamanlı değişikliklere karşı korunan bir dizi oluşturmak için genellikle dizinin erişimini senkronize ederiz. Basit bir yöntem, diziyi bir sınıfa sarıp, yazma işlemleri için DispatchQueue'yu bariyer görevleriyle, okuma işlemleri için ise normal görevlerle kullanmaktır.
Örnek:
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
}
}
Bu yaklaşım, diziden verileri güvenli bir şekilde paralel okuma imkanı sağlar, yazma işlemleri ise sıralı olarak gerçekleştirilir ve yarış koşulları önlenir. Alternatif olarak, NSLock veya diğer senkronizasyon mekanizmaları kullanılabilir, ancak DispatchQueue ile bariyer kullanımı daha modern ve kullanışlıdır.