Назад к вопросам
Разумные решения
Junior — Middle
65
Каким образом можно создать массив, защищенный от одновременных изменений из нескольких потоков?
Компании, где спрашивали
Дунайс
Ответ от нейросети
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 с барьерами — более современный и удобный способ.