Junior — Middle
81
Каким образом можно создать массив, защищенный от одновременных изменений из нескольких потоков?
Companies where asked
Дунайс
Answer from AI
sobes.tech AI
Для создания массива, защищенного от одновременных изменений из нескольких потоков в iOS (Swift), обычно используют синхронизацию доступа к массиву. Один из простых способов — обернуть массив в класс и использовать DispatchQueue с барьерными задачами для записи и обычными задачами для чтения.
Пример:
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
}
}
Такой подход позволяет безопасно читать данные из массива параллельно, а записи выполняются последовательно, предотвращая гонки данных. Альтернативно можно использовать NSLock или другие механизмы синхронизации, но DispatchQueue с барьерами — более современный и удобный способ.