Junior — Middle
Kā izveidot masīvu, kas ir aizsargāts pret vienlaicīgām izmaiņām no vairākiem pavedieniem?
sobes.tech AI
Atbilde no AI
Lai izveidotu masīvu, kas ir aizsargāts pret vienlaicīgām izmaiņām no vairākiem pavedieniem iOS (Swift), parasti izmanto piekļuves sinhronizāciju masīvam. Vienkāršs veids ir ietvert masīvu klasē un izmantot DispatchQueue ar barjeras uzdevumiem rakstīšanai un parastiem uzdevumiem lasīšanai.
Piemērs:
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
}
}
Šī pieeja ļauj droši paralēli lasīt datus no masīva, kamēr rakstīšanas operācijas tiek veiktas secīgi, novēršot datu sacensības. Alternatīvi var izmantot NSLock vai citus sinhronizācijas mehānismus, bet DispatchQueue ar barjerām ir mūsdienīgāka un ērtāka metode.