Junior — Middle
Көптөгөн агымдардан бир убакта өзгөртүүлөрдөн коргогон массивти кантип түзүүгө болот?
sobes.tech AI
AIден жооп
iOS (Swift) içinde birden fazla iş parçacığı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
}
}
Бул ыкма массивден маалыматтарды коопсуз жана параллелдүү окууга мүмкүндүк берет, ал эми жазуулар секвенциалдуу түрдө аткарылат жана атаандаштык шарттарын алдын алат. Alternatif катары NSLock же башка синхрондаштыруу механизмдерин колдонсо болот, бирок DispatchQueue менен барьерлер эң заманбап жана ыңгайлуу ыкма болуп саналат.