Sobes.tech
Назад к вопросам
Junior — Middle
73

Обеспечивает ли структура данных массив безопасность при одновременном доступе из нескольких потоков?

Компании, где спрашивали
Честный ЗнакЧестный Знак

Ответ от нейросети

sobes.tech AI

Массивы в iOS (например, NSArray или Array в Swift) по умолчанию не являются потокобезопасными. Это значит, что при одновременном доступе из нескольких потоков без дополнительной синхронизации может возникнуть состояние гонки, что приведет к непредсказуемому поведению или краху приложения.

Для обеспечения безопасности при многопоточном доступе нужно использовать механизмы синхронизации, например, DispatchQueue с барьерами, NSLock, или другие примитивы синхронизации. В Swift также можно использовать DispatchQueue с атрибутом .concurrent и методы sync или async(flags: .barrier) для безопасного чтения и записи.

Пример использования 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 index < self.array.count {
                result = self.array[index]
            }
        }
        return result
    }
}

Таким образом, массивы сами по себе не обеспечивают безопасность при одновременном доступе из нескольких потоков.