Junior — Middle
Bir nechta oqimdan bir vaqtning o'zida o'zgarishlarga qarshi himoyalangan massivni qanday yaratish mumkin?
sobes.tech AI
AIdan javob
iOS (Swift) da ko'p oqimli jarayonlardan bir vaqtning o'zida o'zgartirilishini himoya qiladigan massiv yaratish uchun odatda massivga kirishni sinxronlashtirish ishlatiladi. Oddiy usul - massivni sinfga o'rab, yozish uchun DispatchQueue bilan bar'yer vazifalarini, o'qish uchun esa oddiy vazifalarni ishlatish.
Misol:
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 yondashuv massivdan ma'lumotlarni xavfsiz tarzda parallel o'qishga imkon beradi, yozishlar esa ketma-ket amalga oshiriladi va raqobat sharoitlarini oldini oladi. Alternativ ravishda, NSLock yoki boshqa sinxronizatsiya mexanizmlaridan foydalanish mumkin, lekin DispatchQueue bilan bar'yerlar zamonaviy va qulay usul hisoblanadi.